mybatisでEnumの型に変換する方法

mybatisでEnumの型に変換する方法

MybatisでEnum型に変換する方法を以下に示します。

1. Enumの定義

まず、Enumクラスを定義します。
例えば、StatusというEnumを定義します。

public enum Status {
    ACTIVE,
    INACTIVE,
    PENDING;
}

2. MybatisのMapper XMLの設定

Enum型のカラムを含むテーブルtest_tableがあると仮定します。
このテーブルのstatusカラムがStatus Enumに対応します。
Mapper XMLでEnum型の変換を設定します。

<resultMap id="testResultMap" type="testModel">
    <result property="status" column="status" typeHandler="com.example.StatusTypeHandler"/>
</resultMap>

<select id="selectTest" resultMap="testResultMap">
    select * from test_table
</select>

3. TypeHandlerの実装

Enum型を扱うために、StatusTypeHandlerを実装します。

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class StatusTypeHandler extends BaseTypeHandler<Status> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Status parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parameter.name());
    }

    @Override
    public Status getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String status = rs.getString(columnName);
        return status == null ? null : Status.valueOf(status);
    }

    @Override
    public Status getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String status = rs.getString(columnIndex);
        return status == null ? null : Status.valueOf(status);
    }

    @Override
    public Status getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String status = cs.getString(columnIndex);
        return status == null ? null : Status.valueOf(status);
    }
}

4. モデルクラスの設定

testModelクラスにEnum型のフィールドを追加します。

public class testModel {
    private Status status;

    // GetterとSetter
    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }
}

以上で、MybatisがEnum型を適切に変換して扱えるようになります。