MyBatis-Plus(十五)通用枚举

以你之姓@ 2023-03-01 08:51 215阅读 0赞

通用枚举

1、问题描述

  1. 项目中我们通常会定义一些枚举,比如下面定义了一个性别枚举:

    @Getter
    public enum GenderEnum {

    1. MALE(1, "男"),
    2. FEMALE(2, "女");
    3. private final int code;
    4. private final String descp;
    5. GenderEnum(final int code, final String descp) {
    6. this.code = code;
    7. this.descp = descp;
    8. }

    }

  2. 然后定义用户实体时,使用这个枚举类型:

    @Data
    public class UserInfo {

    1. private Integer id;
    2. private String userName;
    3. private String passWord;
    4. private Integer age;
    5. private GenderEnum gender;

    }

  3. 最后我们实例化这个实体类,并插入到数据库中:

    // 添加第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);

  4. 查看数据库,可以发现 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

  2. 接着让枚举实现IEnum接口,通过getValue()方法,告诉Mybatis-Plus,枚举类的真正的value是什么,这样就实现了自由定制。

    @Getter
    public enum GenderEnum implements IEnum {

    1. MALE(1, "男"),
    2. FEMALE(2, "女");
    3. private final int code;
    4. private final String descp;
    5. GenderEnum(final int code, final String descp) {
    6. this.code = code;
    7. this.descp = descp;
    8. }
    9. @Override
    10. public Integer getValue() {
    11. return code;
    12. }

    }

    • 还有更简单的方式,不用实现IEnum接口,直接使用@EnumValue注解标注出真正的value是什么,效果同上面是一样的:

    @Getter
    public enum GenderEnum{

    1. MALE(1, "男"),
    2. FEMALE(2, "女");
    3. @EnumValue
    4. private final int code;
    5. private final String descp;
    6. GenderEnum(final int code, final String descp) {
    7. this.code = code;
    8. this.descp = descp;
    9. }

    }

点击跳转至原文地址

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

在这里插入图片描述

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

发表评论

表情:
评论列表 (有 0 条评论,215人围观)

还没有评论,来说两句吧...

相关阅读