Mybatisで数値と文字列を変換する方法

Mybatisで数値と文字列を変換する方法

MyBatisで数値と文字列を変換する方法

MyBatisで数値と文字列を相互に変換するには、TypeHandlerを使用します。
TypeHandlerは、MyBatisがデータベースとJavaの間でデータ型を変換する方法をカスタマイズできる仕組みです。

例: 数値を文字列に変換する

1. TypeHandlerの作成

数値を文字列に変換するTypeHandlerを作成します。

package com.example.mybatis.typehandler;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TestIntegerToStringTypeHandler extends BaseTypeHandler<String> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        ps.setInt(i, Integer.parseInt(parameter));
    }

    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return String.valueOf(rs.getInt(columnName));
    }

    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return String.valueOf(rs.getInt(columnIndex));
    }

    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return String.valueOf(cs.getInt(columnIndex));
    }
}

2. MyBatis設定ファイルでTypeHandlerを登録

MyBatisの設定ファイルでTypeHandlerを登録します。

<typeHandlers>
    <typeHandler handler="com.example.mybatis.typehandler.TestIntegerToStringTypeHandler" javaType="String" jdbcType="INTEGER"/>
</typeHandlers>

3. 使用例

TestTableMapper.xml:

<select id="selectTestTable" resultType="test.TestTable">
    SELECT id, value
    FROM TestTable
    WHERE id = #{id}
</select>

TestTable.java:

package com.example.mybatis.model;

public class TestTable {
    private int id;
    private String value;

    // Getter and Setter
}

4. まとめ

この方法で、数値のカラムvalueを文字列としてマッピングできます。
TypeHandlerを使えば、数値から文字列、文字列から数値への変換を自由に行えます。