Mybatis Plus 通用枚举(图文讲解)
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 66w+ 字,讲解图 2896+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2300+ 小伙伴加入学习 ,欢迎点击围观
前言
大家好,我是小哈。
本小节中,我们将讲解 Mybatis Plus 通用枚举的用法。那么,什么是通用枚举呢?之前小节中,我们的用户表有个性别字段 gender
,在插入数据时,我们的示例代码大致如下:
User user = new User();
user.setName("犬小哈");
// 0: 女, 1: 男
user.setGender(1);
user.setAge(20);
userMapper.insert(user);
这种编码方式不够优雅,被领导发现了,估计要请你去好好谈一谈了。针对那些表字段是固定几个值的情况(比如性别),正确的做法应该是,新建一个通用的性别枚举类,通过枚举类来设置值,步骤如下:
新建一个 GenderEnum
枚举:
/**
* @author: 犬小哈
* @from: 公众号:小哈学Java, 网站:www.quanxiaoha.com
* @date: 2023-01-13 14:15
* @version: v1.0.0
* @description: TODO
**/
@Getter
public enum GenderEnum {
WOMAN(0, "女"),
MAN(1, "男"),
;
private final Integer code;
private final String desc;
GenderEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
}
然后插入数据代码如下:
@Test
void testEnum() {
User user = new User();
user.setName("犬小哈");
user.setGender(GenderEnum.MAN.getCode());
user.setAge(20);
userMapper.insert(user);
}
这样,针对需要设置获取性别的地方,枚举可以重复利用,代码可读性提升,更不容易发生数值设置错误的情况发生。
问题来了,可不可以直接设置实体类中性别字段为枚举呢?
答案是可以的,也正是本文要讲的内容,接下来看看要如何做。
依赖版本
Mybatis Plus 的版本推荐大于等于 3.5.2
, 因为从这个版本后,通用枚举配置步骤根据方便了:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
表结构
测试用户表执行脚本如下:
DROP TABLE IF EXISTS t_user;
CREATE TABLE `t_user` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(30) NOT NULL DEFAULT '' COMMENT '姓名',
`age` int(11) NULL DEFAULT NULL COMMENT '年龄',
`gender` tinyint(2) NOT NULL DEFAULT 0 COMMENT '性别,0:女 1:男',
PRIMARY KEY (`id`)
) COMMENT = '用户表';
新建枚举类
在项目根目录下,新建包 enums
, 用于统一放置项目枚举类,并新建 GenderEnum
枚举:
/**
* @author: 犬小哈
* @from: 公众号:小哈学Java, 网站:www.quanxiaoha.com
* @date: 2023-01-13 14:15
* @version: v1.0.0
* @description: TODO
**/
@Getter
public enum GenderEnum {
WOMAN(0, "女"),
MAN(1, "男"),
;
@EnumValue
private final Integer code;
private final String desc;
GenderEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
}
注意:
@EnumValue
注解用于告诉 MP 存数据时,使用code
字段的值。
实体类
将前面小节中,新建的用户实体类中的性别字段改成枚举:
/**
* @author: 犬小哈
* @from: 公众号:小哈学Java, 网站:www.quanxiaoha.com
* @date: 2022-12-13 14:13
* @version: v1.0.0
* @description: TODO
**/
@Data
@TableName("t_user")
public class User {
/**
* 主键 ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 性别
*/
private GenderEnum gender;
}
单元测试
新建一个单元测试,设置性别的时候,就可以直接使用枚举类了:
@Test
void testEnum() {
User user = new User();
user.setName("犬小哈");
user.setGender(GenderEnum.MAN);
user.setAge(20);
userMapper.insert(user);
}
运行该单元测试,看看好不好使:
成功设置了对应的数值,搞定。
结语
本小节中,我们结合具体代码示例,学习了如何在 Mybatis Plus 中使用通用枚举类,希望对小伙伴们有帮助。