在 MyBatis 中處理枚舉類型的映射有兩種常用的方法:
例如,假設有一個枚舉類型 Gender:
public enum Gender {
MALE,
FEMALE
}
然后定義一個 GenderTypeHandler 類來處理 Gender 類型的映射:
public class GenderTypeHandler extends BaseTypeHandler<Gender> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Gender parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, parameter.name());
}
@Override
public Gender getNullableResult(ResultSet rs, String columnName) throws SQLException {
String value = rs.getString(columnName);
if (value != null) {
return Gender.valueOf(value);
}
return null;
}
@Override
public Gender getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String value = rs.getString(columnIndex);
if (value != null) {
return Gender.valueOf(value);
}
return null;
}
@Override
public Gender getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String value = cs.getString(columnIndex);
if (value != null) {
return Gender.valueOf(value);
}
return null;
}
}
在 MyBatis 的配置文件中注冊這個 TypeHandler:
<typeHandlers>
<typeHandler handler="com.example.GenderTypeHandler"/>
</typeHandlers>
例如,假設有一個枚舉類型 Gender,可以在映射文件中這樣配置:
<resultMap id="userResultMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="gender" column="gender" javaType="com.example.Gender" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
</resultMap>
這樣在查詢時 MyBatis 就會自動使用 EnumTypeHandler 來處理 Gender 類型的映射。