Подтвердить что ты не робот

Java 8 Локальное сопоставление с 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;

Я получаю правильные значения, полученные в этих двух полях (startDate и endDate), когда я объявляю их как java.util.Date.

Это потому, что mybatis в настоящее время не отображает "Timestamp" (SQL Server) в java.time?

Как мне использовать java.time.LocalDate для сопоставления с MyBatis?

4b9b3361

Ответ 1

Пожалуйста, смотрите здесь: http://mybatis.github.io/mybatis-3/configuration.html#typeHandlers

Чтобы использовать LocalDate и Timestamp, вы должны написать собственный типHandler, например:

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

Это должно помочь.

Ответ 2

Посмотрите здесь: 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 даты и времени" были объединены в ядро ​​mybatis с 3.4.5 (см. # 974)

Ответ 3

В моем текущем проекте я создал mappers для классов API Java 8 time.

Вы можете увидеть мою реализацию здесь jneat/mybatis-types