MyBatis使用LocalDateTime遇到的一系列问题

Posted ingxx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis使用LocalDateTime遇到的一系列问题相关的知识,希望对你有一定的参考价值。

问题

在Mybaits中传入参数为LocalDateTime,查询发现结果集为空,插入时发现时间相差13小时

测试

  1. 新建工程,新建测试库(主要此处新工程使用的JDBC为mysql-connector-java版本为8.0.19)
  2. 发现需要设置MyBatis版本为3.4.5以上,在3.4.5之前不支持LocalDateTime会报错
  3. 确认Mybatis版本高于3.4.5以后发现结果集还是不对
  4. 查询后发现因为Mysql时区问题,mysql-connector-java为8.0以上时会使用数据库设置的时区,而不是Java应用的时区,解决方法为设置JDBC链接添加&serverTimezone=Asia/Shanghai
  5. 测试工程结果集正确,相差13小时问题解决

其他问题

  1. 回到原有项目,确认Mybaits版本高于3.4.5
  2. JDBC链接添加&serverTimezone=Asia/Shanghai
  3. 执行后结果集不正确,插入时间错误
  4. 继续查阅资料发现mysql-connector-java数据库驱动的版本不能低于4.2,现有项目使用mysql-connector-java版本为5.1.34,数据库驱动为4.0,升级5.1.49问题解决
  5. 上一步中数据库驱动版本查看是在META-INF/MANIFEST.MF文件中
  6. 问题解决

总结

  1. 首先确认MyBatis版本为3.4.5以上,如果低于此版本可以手动添加类型转换和依赖
  2. 确认JDBC链接有时区设置,如果没有可以添加或者设置MySql默认时区
  3. 确认mysql-connector-java中MySql驱动高于4.2,可以通过升级版本解决

以上是关于MyBatis使用LocalDateTime遇到的一系列问题的主要内容,如果未能解决你的问题,请参考以下文章

mybatis-plus 中的LocalDateTime, LocalDate, LocalTime

使用mybatis出现异常:invalid comparison: java.time.LocalDateTime and java.lang.String

LocalDateTime整合到SpringBoot + MyBatis中

Mybatis中Date类型筛选查询报错:invalid comparison: java.time.LocalDateTime and java.lang.String

使用杰克逊的 LocalDateTime 解析

为什么建议使用你 LocalDateTime ,而不是 Date?