MyBatis-Plus(十五)通用枚举

通用枚举

1、问题描述

  1. 项目中我们通常会定义一些枚举,比如下面定义了一个性别枚举:
@Getter
public enum GenderEnum {
    MALE(1, "男"),
    FEMALE(2, "女");
 
    private final int code;
    private final String descp;
 
    GenderEnum(final int code, final String descp) {
        this.code = code;
        this.descp = descp;
    }
}
  1. 然后定义用户实体时,使用这个枚举类型:
@Data
public class UserInfo {
    private Integer id;
    private String userName;
    private String passWord;
    private Integer age;
    private GenderEnum gender;
}
  1. 最后我们实例化这个实体类,并插入到数据库中:
// 添加第1个用户
UserInfo user1 = new UserInfo();
user1.setUserName("hangge");
user1.setPassWord("123");
user1.setGender(GenderEnum.MALE);
userInfoMapper.insert(user1);
 
// 添加第2个用户
UserInfo user2 = new UserInfo();
user2.setUserName("kitty");
user2.setPassWord("11");
user2.setGender(GenderEnum.FEMALE);
userInfoMapper.insert(user2);
  1. 查看数据库,可以发现 mybatis原生默认是以枚举的名称 Enum.name()作为默认值(即 GenderEnum.MALE.name() 和 GenderEnum.FEMALE.name())。这样就要求对应数据库的字段必须是一个varchar类型,这显然不太合适。

在这里插入图片描述

2、解决办法

  1. Mybatis-Plus的通用枚举处理,增强了原生的枚举处理,让匹配的数据可以自由定制。比如这个枚举值对应的数据库字段类型是int(1),即最终存入数据是如下形式:

在这里插入图片描述

  1. 首先我们在 application.properties 文件中配置扫描枚举类的路径:
mybatis-plus.type-enums-package=com.example.demo.enums
  1. 接着让枚举实现IEnum接口,通过getValue()方法,告诉Mybatis-Plus,枚举类的真正的value是什么,这样就实现了自由定制。
@Getter
public enum GenderEnum implements IEnum<Integer> {
    MALE(1, "男"),
    FEMALE(2, "女");
 
    private final int code;
    private final String descp;
 
    GenderEnum(final int code, final String descp) {
        this.code = code;
        this.descp = descp;
    }
 
    @Override
    public Integer getValue() {
        return code;
    }
}
  • 还有更简单的方式,不用实现IEnum接口,直接使用@EnumValue注解标注出真正的value是什么,效果同上面是一样的:
@Getter
public enum GenderEnum{
    MALE(1, "男"),
    FEMALE(2, "女");
 
    @EnumValue
    private final int code;
    private final String descp;
 
    GenderEnum(final int code, final String descp) {
        this.code = code;
        this.descp = descp;
    }
}

点击跳转至原文地址

--------------最后感谢大家的阅读,愿大家技术越来越流弊!--------------

在这里插入图片描述

--------------也希望大家给我点支持,谢谢各位大佬了!!!--------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值