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型を適切に変換して扱えるようになります。