开发者社区> 问答> 正文

能支持一下LocalDateTime吗?

我用druid + slf4j + mybatis 进行sql打印。 因为我用的日期属性是LocalDateTime类型,然后sql打印出来的参数是 null,

我跟踪到PreparedStatementProxyImpl类中的private void setObjectParameter(int parameterIndex, Object x)函数, 才发现这里不支持LocalDateTime类型,这样到最后只能调用 setParameter(parameterIndex, createParameter(Types.OTHER, null))

所以打印出来的参数就变为 null

希望可以改进支持LocalDateTime,或者提供一个配置接口解决。

原提问者GitHub用户lqzxpp

展开
收起
山海行 2023-07-05 18:15:34 105 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    您遇到的问题是由于 Druid 的 PreparedStatementProxyImpl 类不支持 LocalDateTime 类型,在处理参数时会将其转化为 null。为了解决这个问题,您可以考虑使用 mybatis-plus,它对 LocalDateTime 类型的支持更为友好,可以直接将 LocalDateTime 类型的参数转化为对应的 SQL 类型。

    如果您已经在使用 MyBatis,也可以通过自定义 TypeHandler 的方式来处理 LocalDateTime 类型。您可以创建一个实现了 org.apache.ibatis.type.TypeHandler 接口的 LocalDateTimeTypeHandler 类,将 LocalDateTime 类型转化为对应的 SQL 类型。然后在 MyBatis 的配置文件中将该 TypeHandler 注册到 LocalDateTime 类型上即可。

    2023-07-30 19:33:31
    赞同 展开评论 打赏
  • 自定义类型处理器(Type Handler):你可以编写一个自定义的MyBatis类型处理器,将LocalDateTime类型映射到数据库支持的类型(如TIMESTAMP)。通过自定义类型处理器,你可以在执行SQL语句时正确地将LocalDateTime参数转换为数据库支持的类型,从而避免参数显示为null。你可以参考MyBatis文档中关于类型处理器的说明,了解如何编写和配置自定义类型处理器。

    修改Druid源码:你可以尝试修改Druid连接池的源码,以支持LocalDateTime类型的参数设置。在PreparedStatementProxyImpl类中,你可以添加对LocalDateTime类型的处理逻辑,将其转换为合适的数据库类型(如TIMESTAMP)并设置参数。但请注意,修改第三方库的源码可能会导致一些潜在的问题,例如与未来版本的兼容性或其他功能的影响。在修改源码之前,请确保了解相关风险并备份你的代码。

    2023-07-11 09:17:01
    赞同 展开评论 打赏
  • 问题已修复,请用新版本

    https://github.com/alibaba/druid/releases/tag/1.2.5

    原回答者GitHub用户wenshao

    2023-07-06 10:51:47
    赞同 展开评论 打赏
  • 我用druid + slf4j + mybatis 进行sql打印。 因为我用的日期属性是LocalDateTime类型,然后sql打印出来的参数是 null,

    我跟踪到PreparedStatementProxyImpl类中的private void setObjectParameter(int parameterIndex, Object x)函数, 才发现这里不支持LocalDateTime类型,这样到最后只能调用 setParameter(parameterIndex, createParameter(Types.OTHER, null))

    2023-07-05 18:51:03
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载