MyBatis 可以映射到枚举类吗?
是的,MyBatis 可以映射到 Java 的枚举类型。默认情况下,MyBatis 会使用枚举名称来进行映射。例如,给定以下枚举:
public enum UserStatus {
ACTIVE,
INACTIVE
}
你可以在 MyBatis 映射文件中这样使用:
<resultMap id="UserResultMap" type="com.example.User">
<!-- 其他字段映射 -->
<result property="status" column="status"/>
</resultMap>
在这个例子中,数据库表的 status
列应该包含 ACTIVE
或 INACTIVE
之一的字符串值。
然而,如果你希望根据枚举的顺序值(ordinal)或者其他自定义的字段进行映射,你需要实现并注册一个 TypeHandler。
例如,如果你有一个 status
列,它的值为 0 或 1,表示 UserStatus
的 ACTIVE
和 INACTIVE
,你可以创建以下 TypeHandler:
public class UserStatusTypeHandler extends BaseTypeHandler<UserStatus> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, UserStatus parameter, JdbcType jdbcType) throws SQLException {
ps.setInt(i, parameter.ordinal());
}
@Override
public UserStatus getNullableResult(ResultSet rs, String columnName) throws SQLException {
int status = rs.getInt(columnName);
return UserStatus.values()[status];
}
// 其他方法...
}
然后在 MyBatis 配置文件中注册这个 TypeHandler:
<typeHandlers>
<typeHandler handler="com.example.UserStatusTypeHandler" javaType="com.example.UserStatus"/>
</typeHandlers>
现在,MyBatis 会使用 UserStatusTypeHandler
来处理 UserStatus
枚举类型。