Javaクラスのメンバーフィールドの一部を表すためにJava.time.LocalDate
(Java 8)を使用しています。
class Test {
private LocalDate startDate;
private LocalDate endDate;
//other fields
//getters and setters
}
MyBatisを使用してデータベースを操作しています。 DBから一部のデータを取得すると、他のすべてのフィールドは適切に入力されますが、startDate
およびendDate
フィールドはnullになります。
ただし、Java.util.Date
を使用すると、これら2つのフィールドで適切な値が取得されます
private Date startDate;
private Date endDate;
MyBatisには現在Timestamp
(SQL Server)からJava.time
へのマッピングがないためですか?
MyBatisでマッピングするには、Java.time.LocalDate
をどのように使用すればよいですか?
ここを見てください: 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>
それは役立つはずです。
ここを見てください: https://github.com/mybatis/typehandlers-jsr31
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:Date and Time API」のタイプハンドラーは、3.4.5以降、mybatisコアにマージされています。( #974 を参照)
現在のプロジェクトでは、Java 8回APIクラスのマッパーを作成しました。
ここに私の実装を見ることができます jneat/mybatis-types
クラス名全体を定義するだけです。
resultType="Java.time.LocalDate"