使用mybatis进行Java 8 LocalDate映射

时间:2014-08-04 07:21:31

标签: java mybatis

我使用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进行映射?

4 个答案:

答案 0 :(得分:28)

请看这里: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:

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

答案 1 :(得分:9)

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

您可以在此处查看我的实施jneat/mybatis-types

答案 2 :(得分:7)

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

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

// ExampleTypeHandler.java
@MappedTypes(LocalDate.class)
public class LocalDateTypeHandler extends BaseTypeHandler<LocalDate> {

  //implement all methods
}

像这样配置你的config.xml:

<!-- mybatis-config.xml -->
<typeHandlers>
  <typeHandler handler="your.package.LocalDateTypeHandler"/>
</typeHandlers>

应该有所帮助。

答案 3 :(得分:2)

您应该只定义整个类名:

resultType="java.time.LocalDate"