MybatisPlus 通用枚举的使用

1 篇文章 0 订阅

MybatisPlus 通用枚举的使用

1、声明通用枚举属性

  • 方式一: 使用 @EnumValue 注解枚举属性
/**
 * @author liuhongjun
 */
@Getter
@AllArgsConstructor
public enum StatusEnum {

    SHOW(1, "显示"),
    HIDE(2, "隐藏");

    @EnumValue // 标记数据库存的值是code
    @JsonValue // 标记响应json值
    private Integer code;
    private String descp;

  • 方式二: 枚举属性,实现 IEnum 接口如下:
//MP提供的接口
public interface IEnum<T extends Serializable> {
    T getValue();
}
/**
 * @author liuhongjun
 */
@Getter
@AllArgsConstructor
public enum StatusEnum implements IEnum<Integer>{

    SHOW(1, "显示"),
    HIDE(2, "隐藏");
    private Integer code;
    private String descp;

	@Override
	public Integer getValue() {
		return this.code; // 标记数据库存的值是code
	}

2、配置枚举包扫描

# MP 配置
# 3.0.8之前版本问题默认将枚举注册为EnumOrdinalTypeHandler,这是错误的方式,
# 默认是 org.apache.ibatis.type.EnumTypeHandler 
# 如果项目之中实体统一使用IEnum或注解的方式,
# 可配置成 com.baomidou.mybatisplus.extension.handlers.EnumTypeHandler,也可省略上面的type-enums-package配置
# 配置type-enums-package只对注解方式的枚举处理能提前加载缓存.

mybatis-plus:
	# 设置存放枚举类的包 ,支持统配符 * 或者 ; 分割 
    type-enums-package: com.mp.sampleenum.enums 
    configuration:
        default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler

3、实体类中属性使用枚举类

public class User {
/**
* 名字
* 数据库字段: name varchar(20)
*/
private String name;
/**
* 状态
* 数据库字段:status INT(3)
*/
private StatusEnum status;

}
MyBatis-PlusMyBatis 的一个增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。在使用 MyBatis-Plus 时,可以实现枚举类型与数据库中字段的自动转换,通常通过自定义枚举转换器来实现。 1. 创建枚举类,定义枚举常量以及对应的数据库存储值。 2. 实现 `IEnum` 接口(如果使用MyBatis-Plus 版本是 3.1.2 之后的版本,则需要实现 `IEnum` 接口的泛型版本 `IEnum<T>`),并重写 `getValue()` 方法返回枚举对应的数据库值。 3. 实现 `TypeHandler` 接口,在 `setParameter` 方法中处理如何将枚举类型转换为数据库能够存储的值,在 `getResult` 方法中处理如何将数据库值转换为枚举类型。 下面是一个简单的示例: ```java public enum SexEnum implements IEnum<Integer> { MAN(1, "男"), WOMAN(2, "女"); private int value; private String desc; SexEnum(int value, String desc) { this.value = value; this.desc = desc; } @Override public Integer getValue() { return value; } // 这里还可以根据需要添加其他方法,比如根据描述获取枚举值等。 } ``` 然后注册枚举转换器: ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 添加枚举转换器插件 interceptor.addInnerInterceptor(new EnumMateTypeHandler()); return interceptor; } } // 枚举转换器示例 public class EnumMateTypeHandler<E extends IEnum<?>> extends BaseTypeHandler<E> { private Class<E> type; public EnumMateTypeHandler(Class<E> type) { if (type == null) { throw new IllegalArgumentException("Type argument cannot be null"); } this.type = type; } @Override public void setParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException { if (parameter == null) { ps.setNull(i, Types.VARCHAR); } else { ps.setString(i, String.valueOf(parameter.getValue())); } } @Override public E getResult(ResultSet rs, String columnName) throws SQLException { int value = rs.getInt(columnName); return rs.wasNull() ? null : (E) IEnum.valueOf(type, value); } @Override public E getResult(ResultSet rs, int columnIndex) throws SQLException { int value = rs.getInt(columnIndex); return rs.wasNull() ? null : (E) IEnum.valueOf(type, value); } @Override public E getResult(CallableStatement cs, int columnIndex) throws SQLException { int value = cs.getInt(columnIndex); return cs.wasNull() ? null : (E) IEnum.valueOf(type, value); } } ``` 在实际使用中,可能还需要根据具体的数据库连接和版本进行一些微调。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值