Java 8 LocalDate mapping with mybatis

2022-09-01 21:53:15

我正在使用java.time.LocalDate(Java 8)来表示Java类中的一些成员字段。

class Test{
    private LocalDate startDate;
    private LocalDate endDate;
    //other fields
    
    //getters and setters 
}

我也使用mybatis,与我的数据库进行交互。

从数据库中检索某些数据时,所有其他字段都会正确填充,但 startDate 和 endDate 字段最终为 null。

但是,如果我使用java.util.Date,例如,

 private Date startDate;
 private Date endDate;

当我将这两个字段(startDate和endDate)声明为java.util.Date时,我会获得在这两个字段中检索到的正确值。

是因为mybatis目前没有'Timestamp'(SQL Server)到java.time的映射吗?

我应该如何使用java.time.LocalDate与MyBatis一起映射?


答案 1

看这里: https://github.com/mybatis/typehandlers-jsr310

如果您使用的是 mybatis 版本 3.4 或更高版本,则只需在类路径上添加此工件,MyBatis 将自动注册提供的类型处理程序。

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-typehandlers-jsr310</artifactId>
  <version>1.0.0</version>
</dependency>

如果您使用的是旧版本,则需要手动注册类型处理程序。

<typeHandlers>
  <typeHandler handler="org.apache.ibatis.type.InstantTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.LocalDateTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.LocalTimeTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.OffsetDateTimeTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.OffsetTimeTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.ZonedDateTimeTypeHandler" />
</typeHandlers>

UPD:

“JSR 310:日期和时间 API”的类型处理程序自 3.4.5 起已合并到 mybatis 核心中。(参见 #974)


答案 2

对于我当前的项目,我已经为Java 8时间API类创建了映射器。

你可以在这里看到我的实现 jneat/mybatis-types


推荐