使用mybatis进行Java 8 LocalDate映射

我使用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; 

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

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

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

请看这里: http : //mybatis.github.io/mybatis-3/configuration.html#typeHandlers

要使用LocalDate和Timestamp,您必须编写自定义typeHandler,如下所示:

 // ExampleTypeHandler.java @MappedTypes(LocalDate.class) public class LocalDateTypeHandler extends BaseTypeHandler { //implement all methods } 

像这样配置你的config.xml:

     

它应该有所帮助。

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

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

  org.mybatis mybatis-typehandlers-jsr310 1.0.0  

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

          

UPD:

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

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

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

您应该只定义整个类名:

 resultType="java.time.LocalDate"