MyBatis-Plus(十五)通用枚举
通用枚举
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;
}
}
然后定义用户实体时,使用这个枚举类型:
@Data
public class UserInfo {private Integer id;
private String userName;
private String passWord;
private Integer age;
private GenderEnum gender;
}
最后我们实例化这个实体类,并插入到数据库中:
// 添加第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);查看数据库,可以发现 mybatis原生默认是以枚举的名称 Enum.name()作为默认值(即 GenderEnum.MALE.name() 和 GenderEnum.FEMALE.name())。这样就要求对应数据库的字段必须是一个varchar类型,这显然不太合适。
2、解决办法
- Mybatis-Plus的通用枚举处理,增强了原生的枚举处理,让匹配的数据可以自由定制。比如这个枚举值对应的数据库字段类型是int(1),即最终存入数据是如下形式:
首先我们在 application.properties 文件中配置扫描枚举类的路径:
mybatis-plus.type-enums-package=com.example.demo.enums
接着让枚举实现IEnum接口,通过getValue()方法,告诉Mybatis-Plus,枚举类的真正的value是什么,这样就实现了自由定制。
@Getter
public enum GenderEnum implements IEnum{ 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;
}
}
点击跳转至原文地址
-——————-最后感谢大家的阅读,愿大家技术越来越流弊!———————
-——————-也希望大家给我点支持,谢谢各位大佬了!!!———————
还没有评论,来说两句吧...