表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用MyBatis-Plus的通用枚举来实现。
添加字段
在数据库表添加字段sex
alter table t_user modify sex int null comment '性别';
创建通用枚举类型
package com.dawn.mybatisplus.pojo;
public enum SexEnum {
MALE(1, "男"),
FEMALE(2, "女");
@EnumValue //将注解所标识的属性的值存储到数据库中
private int sex;
private String sexName;
SexEnum(Integer sex, String sexName) {
this.sex = sex;
this.sexName = sexName;
}
}
@EnumValue 用来标记数据库存的值。
Mybatis 原生默认是以枚举的名称:Enum.name()作为默认值,即 User 类中定义的属性 private SexEnum sex; 默认向数据库存的时候会将 SexEnum.MALE.name() 的值存入数据库(String类型)。
使用 @EnumValue 注解标识 SexEnum 类中的 sex 属性后,保存数据库时就会取值 sex 保存进数据库。同样如果标识 sexName 保存时会取 sexName 的值(男/女)保存入库。
实体类修改
在 User 实体类中添加属性sex
@Data
@TableName("t_user")
public class User {
@TableId("uid")
private Long id;
@TableField("username")
private String name;
private Integer age;
private String email;
private SexEnum sex;
@TableLogic//逻辑删除
private int isDeleted;
}
配置扫描通用枚举
mybatis-plus:
configuration:
#配置日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
# 设置实体类所对应的表的统一前缀
table-prefix: t_
# 配置MyBatis-Plus的主键策略
id-type: auto
# 扫描通用枚举的包
type-enums-package: com.dawn.mybatisplus.enums
测试
@Test
public void testEnum(){
User user = new User();
user.setName("admin");
user.setAge(33);
user.setSex(SexEnum.MALE);
int result = userMapper.insert(user);
System.out.println("result:"+result);
}
控制台打印执行结果