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?
Ответы
Ответ 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