写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!
这个通用枚举太简单了,本想不单独整理一篇博客了,闲着也是闲着,整理下吧,废话不多说,先简单说下通用枚举的使用步骤:
- t_user表中新增字段sex
- 对于枚举类的处理有两种方式:1): implements IEnum<Integer> 2): @EnumValue(标记数据库的值) 本篇使用第二章注解的方式
- 配置扫描枚举类的路径(type-enums-package)
定义枚举类:
@Getter
public enum SexEnum {
MAN(1,"男"),
WOMAN(2,"女");
@EnumValue
private int code;
private String value;
SexEnum(Integer code, String value){
this.code = code;
this.value = value;
}
}
说一下上面的@EnumValue注解,@EnumValue用来标记数据库存的值 mybatis原生默认是以枚举的名称: Enum.name()作为默认值,即User类中定义的属性 private SexEnum sex; 默认向数据库存的时候会将SexEnum.MAN.name()的值存入数据库(String类型),使用@EnumValue注解标识SexEnum类中的code属性后,保存数据库时就会取值code保存进数据库。同样如果标识value 保存时会取value的值(男/女)保存入库。
贴一下最新的User类:
@Data
@TableName(value = "t_user")
public class User {
@TableId(value = "user_id",type = IdType.AUTO)
private Integer userId;
private String userName;
private Integer age;
private SexEnum sex;
}
配置扫描枚举类路径,配置文件中追加配置type-enums-package: com.example.springbootmp.domain.enums:
mybatis-plus:
mapper-locations: classpath:mybatis/*.xml #指定xml路径
configuration:
# sql输出到控制台 方便查看
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
type-enums-package: com.example.springbootmp.domain.enums
好了,通用枚举的使用是不是很简单,测试下:
新建EnumTest测试类,先测试一下insert操作,如下:
@Test
public void aInsert() {
User user = new User();
user.setUserName("xiaohua");
user.setAge(18);
user.setSex(SexEnum.WOMAN);
userMapper.insert(user);
}
我们期望将SexEnum.WOMAN的code值,也就是2保存到数据库,看下执行测试方法后数据库:
更新就不测试了,跟insert是一样的,测试下查询吧:
@Test
public void bSelect() {
LambdaQueryWrapper<User> wrapper = new QueryWrapper<User>().lambda().eq(User::getSex,
SexEnum.WOMAN);
List<User> userList = userMapper.selectList(wrapper);
System.out.println(userList);
}
我们期望查询出来的sex是枚举类型,而不是数字,执行结果:
最后测试下删除:
@Test
public void cDelete() {
LambdaQueryWrapper<User> wrapper = new QueryWrapper<User>().lambda().eq(User::getSex,
SexEnum.WOMAN);
userMapper.delete(wrapper);
}
执行后看看数据库的数据是否删除了,执行结果:
完毕!
补充:如果数据库中有两条数据:性别中一条存的2,一条存的是女(当然这种情况正常是不会存在的)。
1. 在查询时,不会报错,而只是查询到了一条匹配的数据
2. 在删除时,会报错(Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '女')