Java 8 LocalDate 映射与 mybatis

标签 java mybatis

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

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

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

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

但是,如果我使用 java.util.Date,如下所示,

 private Date startDate;
 private Date endDate;

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

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

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

最佳答案

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

更新:

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

关于Java 8 LocalDate 映射与 mybatis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25113579/

相关文章:

java - 使用jspf时编码的问题

java - Long.parseLong ("digitstring too significant") 产生 java.lang.NumberFormatException

java - 将 varchar 读取为 char 数组

java - Mybatis 一对多的集合映射总是有一个默认实体

java - 如何让mybatis需要事务?

java - 使用 Java 发布 iCalendar Feed

java - Oreo ViewPager 显示外部存储文件路径中的图像

java - 分析方法性能

orm - 类/对象 View 中的本地化表

java - MyBatis 抛出异常 "stream closed"