mybatis sharding-jdbc Java8日期
环境:Java8、Spring Boot 2.2.10.RELEASE、MyBatis3.5.5、sharding-sphere4.1.1
实体对象有个字段是LocalDateTime在保存时没有任何问题 。 在查询时会报如下错误:
文章插图
红色框对应的方法:
@Overridepublic LocalDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {return rs.getObject(columnName, LocalDateTime.class);}
也就是这里针对LocalDateTime数据类型当前的jdbc不支持rs.getObject(columnName, LocalDateTime.class);这种写法 。
LocalDateTime、LocalDate这些个日期类型是Java8开始才有的 , 而这些数据类型是需要JDBC4.2版本才开始支持的也就是JDBC4.2版本才开始支持JSR-310中的对象 。
再看shardingsphere我用的版本是4.1.1根据官方版本发行说明从4.1.0就支持java8了啊
文章插图
是我哪里没有用对还是哪里理解错误了?望高人告知
解决方法:
自定义LocalDateTime类型转换 , 直接参考当前的LocalDateTimeTypeHandler
package com.pack.ss.config;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import org.apache.ibatis.type.MappedJdbcTypes;import org.apache.ibatis.type.MappedTypes;import org.springframework.stereotype.Component;import com.github.pagehelper.StringUtil;@Component@MappedTypes(LocalDateTime.class)@MappedJdbcTypes(value = http://kandian.youth.cn/index/JdbcType.TIMESTAMP, includeNullJdbcType = true)public class MyLocalDateTimeTypeHandler extends BaseTypeHandler
注意getNullableResult方法 。 到此问题解决了
【mybatis sharding-jdbc Java8日期】完毕!!!
推荐阅读
- 真香警告!Alibaba珍藏版mybatis手写文档,刷起来
- SpringBoot+MyBatis+MySQL读写分离实现
- Mybatis是如何执行一条SQL命令的
- SpringBoot配置数据源及MyBatis分页的要点
- 什么是建造者模式?他在jdk、MyBatis源码怎么运用?
- Sharding-Jdbc之水平分库和读写分离(二)
- SpringBoot集成Mybatis
- 写给大忙人看的,MyBatis日志如何做到兼容常用的日志框架
- mybatis从入门到精通,第一篇《入门基本搭建》,干货满满