李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
07.MyBatis-Plus通用枚举和代码生成器
Leefs
2022-12-22 PM
959℃
0条
[TOC] ### 一、通用枚举 #### 1.1 概述 MyBatis-Plus中提供了通用枚举,简单来说就是将数据库中的某一字段的代替的含义转换成真实的含义将数据读给用户,用户在存储时也会将真实值转换成代替的数字存入到数据库中。 举个例子:用户性别在数据库中存储为1(表示男)、2(表示女)。在读取数据时就会自动将1、2值转换为男或女。 这样做是可以有效地节省数据库的存储空间。 #### 1.2 添加字段 在t_user表中,添加一个性别字段sex。默认值为1,其中存储的值1为男,2为女。将字段添加到is_deleted字段的后面。 ```sql ALTER TABLE t_user ADD COLUMN sex int(1) NULL DEFAULT 1 COMMENT '1-男,2-女' AFTER is_deleted; ``` 查看下图,可看到已经将性别字段(sex)添加到t_user表中 ![07.MyBatis-Plus通用枚举和代码生成器01.jpg](https://lilinchao.com/usr/uploads/2022/12/3511370251.jpg) #### 1.3 创建通用枚举类型 新建一个枚举包,在枚举包下写`SexEnum`类,该类需要继承枚举接口`IEnum`,需要实现get方法,就是返回要存入数据库的数字值。 ```java import com.baomidou.mybatisplus.annotation.EnumValue; import lombok.Getter; /** * @author lilinchao * @date 2022-12-22 * @description 性别枚举类 **/ @Getter public enum SexEnum { MALE(1, "男"), FEMALE(2, "女"); @EnumValue private Integer sex; private String sexName; SexEnum(Integer sex, String sexName) { this.sex = sex; this.sexName = sexName; } //toString方法返回数据库中字段对应的值含义,用来展示给用户。 @Override public String toString() { return this.sexName; } } ``` **说明** `@EnumValue` 用来标记数据库存的值。 Mybatis原生默认是以枚举的名称:`Enum.name()`作为默认值,即 User 类中定义的属性 `private SexEnum sex;` 默认向数据库存的时候会将`SexEnum.MALE.name()`的值存入数据库(String类型)。 使用 `@EnumValue` 注解标识 `SexEnum` 类中的 sex 属性后,保存数据库时就会取值 sex 保存进数据库。同样如果标识 `sexName` 保存时会取 `sexName` 的值(男/女)保存入库。 > 注意:生成toString方法返回数据库中字段对应的值含义,用来展示给用户。 #### 1.4 实体类修改 **在 User 实体类中添加属性sex** ```java @Data //lombok注解 @AllArgsConstructor @NoArgsConstructor @TableName("t_user") //设置实体类对应的表名 public class User { @TableId private Long id; private String name; private Integer age; private String email; private SexEnum sex; @TableLogic private int isDeleted; } ``` #### 1.5 配置扫描通用枚举 ```yaml mybatis-plus: configuration: # 配置MyBatis日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: # 配置MyBatis-Plus操作表的默认前缀 table-prefix: t_ # 配置MyBatis-Plus的主键策略 id-type: auto # 扫描通用枚举的包 type-enums-package: com.lilinchao.mybatisplusdemo.enums ``` #### 1.6 测试添加数据 ```java @Test public void testSexEnum(){ User user = new User(); user.setName("Enum"); user.setAge(20); user.setEmail("Leefs@163.com"); //设置性别信息为枚举项,会将@EnumValue注解所标识的属性值存储到数据库 user.setSex(SexEnum.MALE); userMapper.insert(user); } ``` **运行结果** ``` ==> Preparing: INSERT INTO t_user ( name, age, email, sex, is_deleted ) VALUES ( ?, ?, ?, ?, ? ) ==> Parameters: Enum(String), 20(Integer), Leefs@163.com(String), 1(Integer), 0(Integer) <== Updates: 1 ``` #### 1.7 测试查询方法 ```java @Test public void testSelectBySex() { QueryWrapper
wrapper = new QueryWrapper<>(); wrapper.eq("sex", SexEnum.FEMALE); List
users = userMapper.selectList(wrapper); users.forEach(System.out::println); } ``` **运行结果** ``` ==> Preparing: SELECT id,name,age,email,sex,is_deleted FROM t_user WHERE is_deleted=0 AND (sex = ?) ==> Parameters: 2(Integer) <== Columns: id, name, age, email, sex, is_deleted <== Row: 4, Sandy, 28, leefs@163.com, 2, 0 <== Row: 5, Billie, 24, test5@baomidou.com, 2, 0 <== Total: 2 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f117b3d] User(id=4, name=Sandy, age=28, email=leefs@163.com, sex=女, isDeleted=0) User(id=5, name=Billie, age=24, email=test5@baomidou.com, sex=女, isDeleted=0) ``` ### 二、代码生成器 mybatisplus 代码生成器分为两个版本,`mybatis-plus-generator 3.5.1` 以下版本和`mybatis-plus-generator 3.5.1` 以上版本。本次使用3.5.1以上版本进行演示。 #### 2.1 准备表 + **表名称user_demo** ```sql CREATE TABLE `user_demo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(15) NOT NULL DEFAULT '', `password` varchar(15) NOT NULL DEFAULT '', `age` int(11) NOT NULL DEFAULT '0', `email` varchar(30) DEFAULT NULL, `tel` varchar(11) NOT NULL DEFAULT '', `address` varchar(255) DEFAULT NULL, `create_time` datetime DEFAULT NULL, `updata_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; ``` ![07.MyBatis-Plus通用枚举和代码生成器02.jpg](https://lilinchao.com/usr/uploads/2022/12/4196147232.jpg) #### 2.2 添加依赖 ```xml
com.baomidou
mybatis-plus-boot-starter
3.5.1
com.baomidou
mybatis-plus-generator
3.5.2
org.apache.velocity
velocity-engine-core
2.3
``` #### 2.3 编写自动代码生成类 ```java import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.config.rules.DateType; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @author lilinchao * @date 2022-12-22 * @description MybatisPlus代码自动生成工具类 **/ public class MybatisPlusGenerator { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8"; String username = "root"; String password = "123456"; //表名集合 List
tables = new ArrayList<>(); tables.add("user_demo"); FastAutoGenerator.create(url, username, password) //全局配置 .globalConfig(builder -> { builder.fileOverride() // 开启覆盖之前生成的文件 .disableOpenDir() //禁止打开输出目录 .outputDir(System.getProperty("user.dir") + "\\src\\main\\java") //指定输出目录 .author("Leefs") //作者名 // .enableKotlin() //开启 kotlin 模式 // .enableSwagger() //开启 swagger 模式 .dateType(DateType.TIME_PACK) //时间策略 .commentDate("yyyy-MM-dd"); //注释日期 }) //包配置 .packageConfig(builder -> { builder.parent("com.lilinchao.mybatisplusdemo") //父包名 .entity("pojo") //Entity 包名 .service("service") // Service 包名 .serviceImpl("service.impl") //Service Impl 包名 .mapper("mapper") //Mapper 包名 .xml("mapper.xml") // Mapper XML 包名 .controller("controller") //Controller 包名 .other("config") //自定义文件包名 输出自定义文件时所用到的包名 .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper"));//指定xml位置 }) //策略配置 .strategyConfig(builder -> { builder.addInclude(tables) .addTablePrefix("user_")//表名前缀,配置后生成的代码不会有此前缀 .serviceBuilder() .formatServiceFileName("%sService")//服务层接口名后缀 .formatServiceImplFileName("%sServiceImpl")//服务层实现类名后缀 .entityBuilder() .enableLombok()//实体类使用lombok,需要自己引入依赖 //.logicDeleteColumnName("status")//逻辑删除字段,使用delete方法删除数据时会将status设置为1。调用update方法时并不会将该字段放入修改字段中,而是在条件字段中 .enableTableFieldAnnotation()//加上字段注解@TableField .controllerBuilder() .formatFileName("%sController")//控制类名称后缀 .enableRestStyle() .mapperBuilder() .superClass(BaseMapper.class) .formatMapperFileName("%sMapper") .enableMapperAnnotation() .formatXmlFileName("%sMapper"); }) .execute(); } } ``` *附参考文章链接地址* *《尚硅谷MyBatisPlus教程》*
标签:
MyBatis
,
MyBatis-Plus
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/2701.html
上一篇
06.MyBatis-Plus插件介绍
下一篇
08.MyBatis-Plus多数据源
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
Beego
栈
Hadoop
Tomcat
Golang
Shiro
机器学习
容器深入研究
Elastisearch
锁
Hbase
二叉树
Typora
RSA加解密
JavaWeb
BurpSuite
哈希表
JVM
线程池
Livy
Docker
Ubuntu
Linux
序列化和反序列化
数据结构和算法
Zookeeper
FastDFS
SpringCloudAlibaba
微服务
Sentinel
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞