web-dev-qa-db-ja.com

Java 8 mybatisを使用したLocalDateマッピング

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をどのように使用すればよいですか?

15
Scrooge McD

ここを見てください: 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>

それは役立つはずです。

7
Aliaksei

ここを見てください: 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 を参照)

29
mit

現在のプロジェクトでは、Java 8回APIクラスのマッパーを作成しました。

ここに私の実装を見ることができます jneat/mybatis-types

9
rumatoest

クラス名全体を定義するだけです。

resultType="Java.time.LocalDate"
2
Houssem Badri