LoginSignup
18
14

More than 5 years have passed since last update.

mybatis-typehandlers-jsr310がリリースされた

Last updated at Posted at 2016-04-09

ついに!?2016年4月9日(昨日!!)にmybatis-typehandlers-jsr310のバージョン1.0.0がリリースされました。mybatis-typehandlers-jsr310には、JSR-310 Date and Time API用のタイプハンドラーが格納されています。
これまでは、独自にタイプハンドラーを作成するか、またはEntityなどのJavaBeanにはレガシーなjava.util.Date, java.sql.Time, java.sql.Date, java.sql.Timestampを使っていたと思いますが、Java 8のリリースから2年が経ち、ようやくMyBatisでもJSR-310の日時型が使えるようになりました :smile:

バージョン 1.0.1

2016年6月26日にバージョン1.0.1がリリースされ、java.time.Yearjava.time.Monthがサポートされました。

バージョン 1.0.2

2017年1月2日にバージョン1.0.2がリリースされ、java.time.YearMonthjava.time.chrono.JapaneseDateがサポートされました。

mybatis-typehandlers-jsr310を依存アーティファクトに追加

MyBaitsは、最新のJavaバージョンから2つ下のバージョン(現時点だとJava 6)までサポートするというポリシーがあるらしく、Java 8以上が必要となるJSR-310用のタイプハンドラーは専用のアーティファクトとして提供されています。
そのため、Mybatis本体とは別に、mybatis-typehandlers-jsr310を依存アーティファクトに追加する必要があります。

po.xml
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-typehandlers-jsr310</artifactId>
  <version>1.0.2</version> <!-- バージョンは最新を指定 (2017/1/2時点では1.0.2が最新) -->
</dependency>

タイプハンドラーをMyBatisに登録

MyBatis 3.4以上を使用する場合は、自動でJSR-310用のタイプハンドラーがMyBatisに登録される仕組みになっているため、特になにもする必要はありません。
MyBatis 3.3.x以下のバージョンを使用する場合は、MyBatis設定ファイルやMyBatis-Springから提供されているSqlSessionFactoryBeanを使用して、明示的にタイプハンドラーを登録する必要があります。

Note:

MyBatis 3.4以上を使っている場合でも、メンテナンスバージョンによって自動登録される対象が異なるため、明示的に登録しないと使えないタイプハンドラーがあります。

以下は、MyBatis設定ファイルを使用してタイプハンドラーを登録する際の設定例です。

mybatis-config.xml
<typeHandlers>
  <!-- ↓ MyBatis 3.3.x以前の場合は指定が必要 -->
  <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" />
  <!-- ↓ MyBatis 3.4.0以前の場合は指定が必要 -->
  <typeHandler handler="org.apache.ibatis.type.YearTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.MonthTypeHandler" />
  <!-- ↓ MyBatis 3.4.1以前の場合は指定が必要 -->
  <typeHandler handler="org.apache.ibatis.type.YearMonthTypeHandler" />
  <typeHandler handler="org.apache.ibatis.type.JapaneseDateTypeHandler" />
</typeHandlers>

ドメインオブジェクトにJSR-310の日時型を使用

EntityなどのドメインオブジェクトにJSR-310の日時型を指定するだけで、JDBCの対応型(java.sql.Time, java.sql.Date, java.sql.Timestamp)に相互変換できます。

src/main/java/com/example/domain/Todo.java

package com.example.domain;

public class Todo {
    private int id;
    private String title;
    private String details;
//    private java.sql.Date deadlineDate;
    private java.time.LocalDate deadlineDate; // JSR-310のLocalDateを指定
    private boolean finished;
    // ... setter and getter
}

まとめ

オレオレTypeHandlerではなく、mybatis-typehandlers-jsr310を使いましょう。
そして、java.util.Datejava.util.Calendarなどのレガシーな日時型を使うのではなく、積極的にJSR-310のAPIを使いましょう。

18
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
14