UUID のタイプハンドラ

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>