MyBatis中如何优雅地处理enum

   2024-10-06 3000
核心提示:在 MyBatis 中处理 Enum 类型可以通过以下几种方式来优雅地实现:使用 TypeHandler:在 MyBatis 中,可以自定义 TypeHandler 来

在 MyBatis 中处理 Enum 类型可以通过以下几种方式来优雅地实现:

使用 TypeHandler:在 MyBatis 中,可以自定义 TypeHandler 来处理 Enum 类型。可以通过继承 BaseTypeHandler 类来实现自定义的 TypeHandler,并在该类中实现对 Enum 类型的转换逻辑。例如:
public class MyEnumTypeHandler extends BaseTypeHandler<MyEnum> {    @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 = rs.getString(columnName);        return value != null ? MyEnum.valueOf(value) : null;    }    @Override    public MyEnum getNullableResult(ResultSet rs, int columnIndex) throws SQLException {        String value = rs.getString(columnIndex);        return value != null ? MyEnum.valueOf(value) : null;    }    @Override    public MyEnum getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {        String value = cs.getString(columnIndex);        return value != null ? MyEnum.valueOf(value) : null;    }}

然后在 MyBatis 的配置文件中注册该 TypeHandler:

<typeHandlers>    <typeHandler handler="com.example.MyEnumTypeHandler"/></typeHandlers>
使用 EnumTypeHandler:MyBatis 也提供了 EnumTypeHandler 类来处理 Enum 类型。使用 EnumTypeHandler 可以直接将 Enum 类型映射为数据库中的字符串类型,无需自定义 TypeHandler。例如:
<resultMap id="myResultMap" type="com.example.MyEntity">    <id property="id" column="id"/>    <result property="myEnum" column="my_enum" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/></resultMap>
使用 @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<MyEnum> {    @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 中的映射和转换。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号