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;
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
}
以上で、MybatisがEnum型を適切に変換して扱えるようになります。