UUID型のタイプハンドラの必要性をあまり感じなかったので、今まで書いてなかった。
PostgreSQL なら、gen_random_uuid() 関数で生成してくれるし
SELECT クエリ結果も、mybatis は、String に自動マッピングで抽出できるとなると、
あまり、java.util.UUID で扱う機会が少ないからだ。
でも、java.util.UUIDの static メソッド randomUUID() で
生成した結果をDBに書き込みたいとなるとハンドラが必要、
作ることにした。
package org.yipuran.mybatis.types; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.UUID; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; /** * UUIDTypeHandler. UUIDタイプハンドラ */ public class UUIDTypeHandler extends BaseTypeHandler<UUID>{ @Override public void setNonNullParameter(PreparedStatement ps, int i, UUID parameter, JdbcType jdbcType) throws SQLException { ps.setObject(i, parameter); } @Override public UUID getNullableResult(ResultSet rs, String columnName) throws SQLException { return rs.getObject(columnName, UUID.class); } @Override public UUID getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return rs.getObject(columnIndex, UUID.class); } @Override public UUID getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return cs.getObject(columnIndex, UUID.class); } }
コンフィグレーションに、以下を追加すればよい。
<typeHandlers> <typeHandler handler="org.yipuran.mybatis.types.UUIDTypeHandler" javaType="java.util.UUID"/> </typeHandlers>