寫在前面:各位看到此博客的小伙伴,如有不對的地方請及時通過私信我或者評論此博客的方式指出,以免誤人子弟。多謝!
這個通用枚舉太簡單了,本想不單獨整理一篇博客了,閑着也是閑着,整理下吧,廢話不多說,先簡單說下通用枚舉的使用步驟:
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: '女')