Java 8 LocalDate mapping with mybatis

Look here: https://github.com/mybatis/typehandlers-jsr310

If you are using mybatis version 3.4 or later, you can simply add this artifact on your classpath and MyBatis will automatically register the provided type handlers.

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

If you are using an older version you need to register the type handlers manually.

<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:

Type handlers for "JSR 310: Date and Time API" has been merged into mybatis core since 3.4.5.(See #974)


For my current project I've created mappers for Java 8 time API classes.

You can see my implementation here jneat/mybatis-types


Please, look here: http://mybatis.github.io/mybatis-3/configuration.html#typeHandlers

To use LocalDate and Timestamp you have to write a custom typeHandler, like this:

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

  //implement all methods
}

config your config.xml like this:

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

It should help.

Tags:

Java

Mybatis