MybatisPlus中LocalDateTime引发的一些问题和解决办法

问题描述


我的项目中后台使用了
Springboot 2.2.1
Mybatis-Plus 3.2.0
Mysql5.7
Mysql驱动5.1.47

基本情况介绍


Mybatis-Plus默认会将数据库中的timestamp字段生成为JAVA的LocalDateTime类型属性,本于JAVA8的LocalDateTime要比Date要好上N个数量级,所以本文的基础是建立在我非要用LocalDateTime这个类。

起先


我使用的Druid1.18做为的数据库连接池(大家如果有使用1.10版本的,问题肯定也同在)。
在查询数据库的时候会报错:

org.springframework.dao.InvalidDataAccessApiUsageException: Error attempting to get column 'create_time' from result set.  Cause: java.sql.SQLFeatureNotSupportedException
; null; nested exception is java.sql.SQLFeatureNotSupportedException

原因其实是在Druid,他无法做这个转换。

解决办法

将druid的版本升级到1.1.21版本:

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.21</version>
        </dependency>

结合文章开头的各个版本,会发现问题解决了。

其他问题

我的数据库User表有两个timestamp字段,只有一个可以设置默认curr_timestamp,另外一个默认变成了全0(0000-00-00 00:00:00),这样的字段在查询的时候会报一个错误:

com.mysql.cj.exceptions.DataReadException: Zero date value prohibited

这个问题的解决办法很简单,就是在url上添加上对null时间的转化处理:zeroDateTimeBehavior=convertToNull

?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull

至此,查询再无担忧,也没有什么降级之说,也没有什么自己实现转换类之说,悠哉悠哉。

1 个赞

我收到了druidissues通知。这个是你吗?

这个不是我喔