MyBatis 3.4から、BLOGとjava.io.InputStream
、CLOBとjava.io.Reader
変換用のTypeHandler
がようやく本家に組み込まれました
MyBatis 3.3までは、BLOBとbyte[]
、CLOBとjava.lang.String
変換用のTypeHandler
はありましたが、大きなデータを扱うことが多いBLOBとCLOBで利用できるケースは稀で、皆さん自作していたのではないでしょうか?
実際に、私は自作していました・・・
特に使い方を説明をする必要はないと思いますが・・・簡単に説明しておきましょう。
動作検証バージョン
- MyBatis 3.4.0
MyBatis 3.4で追加されたBLOG/CLOB用のTypeHandlerについて
追加されたTypeHandlerは、JDBC 4.0 (Java 1.6)で追加されたAPIを使用することで、BLOGとjava.io.InputStream
、CLOBとjava.io.Reader
の変換を実現しています。
そのため、JDBC 4.0の該当メソッドが仕様通りに実装されていないJDBCドライバーでは使うことができません。
Note: JDBC 4.0のサポート状況
BLOBとCLOBを使う場合は、JDBCドライバーのサポート状況を確認してください。MyBatisが使っているメソッドがサポートされていない場合は、残念ながらTypeHandler
を自作する必要があります。
最近のJDBCドライバーであれば、だいたいサポートしていると思いますが、PostgreSQLでは最近BLOBがサポートされました。(なお、当時はCLOBはサポートされていませんでしたが、最近はサポートされているかもしれません・・・)
TypeHandlerの適用方法
MyBatis組み込みのBLOB/CLOB用のTypeHandler
を適用したい場合は、JavaBeanのプロパティをInputStream
やReader
にするだけです。
public class Profile {
private int id;
private String name;
private InputStream faceImage; // BLOB
private Reader introductionText; // CLOB
// ... (Other field and setter/getter)
}
まとめ
JDBC 4.0実装のJDBCドライバーを使っている場合は、MyBatis 3.4にバージョンアップしたら自作のTypeHandler
は不要になります。
私が携わっているプロジェクトでも、自作していたTypeHandler
は削除しました