在 MyBatis 中处理 Enum 类型可以通过以下几种方式来优雅地实现:
- 使用 TypeHandler:在 MyBatis 中,可以自定义 TypeHandler 来处理 Enum 类型。可以通过继承 BaseTypeHandler 类来实现自定义的 TypeHandler,并在该类中实现对 Enum 类型的转换逻辑。例如:
public class MyEnumTypeHandler extends BaseTypeHandler{ @Override public void setNonNullParameter(PreparedStatement ps, int i, MyEnum parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter.name()); } @Override public MyEnum getNullableResult(ResultSet rs, String columnName) throws SQLException { String value = https://www.yisu.com/ask/rs.getString(columnName);"hljs">int columnIndex) throws SQLException { String value = https://www.yisu.com/ask/rs.getString(columnIndex);"hljs">int columnIndex) throws SQLException { String value = https://www.yisu.com/ask/cs.getString(columnIndex);> 然后在 MyBatis 的配置文件中注册该 TypeHandler:
- 使用 EnumTypeHandler:MyBatis 也提供了 EnumTypeHandler 类来处理 Enum 类型。使用 EnumTypeHandler 可以直接将 Enum 类型映射为数据库中的字符串类型,无需自定义 TypeHandler。例如:
- 使用 @EnumType 注解:如果使用 MyBatis Plus 的话,可以使用 @EnumType 注解来标识 Enum 字段,并通过配置枚举映射器来处理 Enum 类型。例如:
@Data @TableName("my_table") public class MyEntity { @TableId private Long id; @TableField(typeHandler = EnumTypeHandler.class) @EnumType(EnumHandler.class) private MyEnum myEnum; } public enum MyEnum { VALUE1, VALUE2 } public class EnumHandler extends IEnumHandler{ @Override public Object getValue(MyEnum enumObj, String s) { return enumObj.name(); } @Override public MyEnum getResult(Object o, String s) { return MyEnum.valueOf((String) o); } } 通过以上几种方式,可以优雅地处理 Enum 类型在 MyBatis 中的映射和转换。