目录
-
- 第一章 MyBatis-Plus3概述
-
- 1.1、简介
- 1.2、特性
- 1.3、框架结构
- 1.4、项目地址
- 1.5、版本介绍
- 1.6、快速安装
- 1.7、开发环境
- 第二章 MyBatis-Plus3增删改查
-
- 2.1、项目搭建
- 2.2、项目配置(1)
- 2.3、项目配置(2)
- 2.4、数据导入
- 2.5、创建实体
- 2.6、创建接口
- 2.7、测试准备
- 2.8、增删改查
-
- 2.8.1、insert
- 2.8.2、updateById
- 2.8.3、selectById
- 2.8.4、selectByMap
- 2.8.5、selectBatchIds
- 2.8.6、deleteById
- 2.8.7、deleteByMap
- 2.8.8、deleteBatchIds
- 第三章 MyBatis-Plus3注解介绍
-
- 3.1、@TableName
- 3.2、@TableId
- 3.3、@TableField
- 3.4、@Version
- 3.5、@EnumValue
- 3.6、@TableLogic
- 3.7、@SqlParser
- 3.8、@KeySequence
- 第四章 MyBatis-Plus3条件构造器
-
- 4.1、数据导入
- 4.2、构造器简介
- 4.3、构造器使用(1)
-
- 4.3.1、带条件的查询
- 4.3.2、带条件的修改
- 4.3.3、带条件的删除
- 4.4、构造器使用(2)
-
- 4.4.1、allEq
- 4.4.2、eq
- 4.4.3、ne
- 4.4.4、gt
- 4.4.5、ge
- 4.4.6、lt
- 4.4.7、le
- 4.4.8、between
- 4.4.9、notBetween
- 4.4.10、like
- 4.4.11、notLike
- 4.4.12、likeLeft
- 4.4.13、likeRight
- 4.4.14、isNull
- 4.4.15、isNotNull
- 4.4.16、in
- 4.4.17、notIn
- 4.4.18、inSql
- 4.4.19、notInSql
- 4.4.20、groupBy
- 4.4.21、orderByAsc
- 4.4.22、orderByDesc
- 4.4.23、orderBy
- 4.4.24、having
- 4.4.25、func
- 4.4.26、or
- 4.4.27、and
- 4.4.28、nested
- 4.4.29、apply
- 4.4.30、last
- 4.4.31、exists
- 4.4.32、notExists
- 第五章 MyBatis-Plus3代码生成器
-
- 5.1、数据导入
- 5.2、代码生成器简介
- 5.3、代码生成器使用
-
- 5.3.1、添加依赖
- 5.3.2、添加配置
- 5.3.3、启动配置
- 5.3.4、代码生成
- 5.3.5、工程结构
- 5.3.6、添加代码
- 5.3.7、启动运行
- 5.3.8、测试方法
- 5.3.9、温馨提示
- 5.4、代码生成器方法
-
- 5.4.1、save
- 5.4.2、saveOrUpdate
- 5.4.3、remove
- 5.4.4、update
- 5.4.5、get
- 5.4.6、list
- 5.4.7、page
- 5.4.8、count
- 5.4.9、chain
- 第六章 MyBatis-Plus3配置详解
-
- 6.1、配置概述
- 6.2、配置方式
- 6.3、配置选项
-
- 6.3.1、mapperLocations
- 6.3.2、typeAliasesPackage
- 6.3.3、typeHandlersPackage
- 6.3.4、typeEnumsPackage
- 6.3.5、checkConfigLocation
- 6.3.6、executorType
- 6.3.7、configurationProperties
- 6.3.8、configuration
-
- 6.3.8.1、mapUnderscoreToCamelCase
- 6.3.8.2、defaultEnumTypeHandler
- 6.3.8.3、aggressiveLazyLoading
- 6.3.8.4、autoMappingBehavior
- 6.3.8.5、autoMappingUnknownColumnBehavior
- 6.3.8.6、localCacheScope
- 6.3.8.7、cacheEnabled
- 6.3.8.8、callSettersOnNulls
- 6.3.8.9、configurationFactory
- 6.3.8.10、MyBatis3的配置属性
- 6.3.9、globalConfig
-
- 6.3.9.1、banner
- 6.3.9.2、enableSqlRunner
- 6.3.9.3、superMapperClass
- 6.3.9.4、dbConfig
-
- 6.3.9.4.1、idType
- 6.3.9.4.2、tablePrefix
- 6.3.9.4.3、schema
- 6.3.9.4.4、columnFormat
- 6.3.9.4.5、propertyFormat
- 6.3.9.4.6、tableUnderline
- 6.3.9.4.7、capitalMode
- 6.3.9.4.8、logicDeleteField
- 6.3.9.4.9、logicDeleteValue
- 6.3.9.4.10、logicNotDeleteValue
- 6.3.9.4.11、insertStrategy
- 6.3.9.4.12、updateStrategy
- 6.3.9.4.13、selectStrategy
- 6.4、配置小结
- 第七章 MyBatis-Plus3插件扩展
-
- 7.1、分页插件
- 7.2、执行分析插件
- 7.3、性能分析插件
- 7.4、乐观锁插件
- 7.5、快速开发插件
- 第八章 MyBatis-Plus3其它功能
-
- 8.1、Sql 注入器
- 8.2、逻辑删除
- 8.3、通用枚举
-
- 8.3.1、保存枚举值
- 8.3.2、保存枚举名称
- 8.4、自动填充功能
- 8.5、字段类型处理器
- 8.6、自定义ID生成器
- 8.7、Sequence主键
配套资料,免费下载
链接:https://pan.baidu.com/s/1yQS9hGP3r_zZbkuo-jlijA
提取码:4v88
复制这段内容后打开百度网盘手机App,操作更方便哦
第一章 MyBatis-Plus3概述
1.1、简介
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
我们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的1P、2P,基友搭配,效率翻倍。
1.2、特性
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
- 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
- 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
1.3、框架结构
1.4、项目地址
官网地址:点击打开
源码地址:点击打开
文档地址:点击打开
配置地址:点击打开
1.5、版本介绍
全新的 MyBatis-Plus
3.0 版本基于 JDK8,提供了 lambda
形式的调用,所以安装集成 MP3.0 要求如下:
- JDK 8+
- Maven or Gradle
1.6、快速安装
-
Spring Boot
-
Maven:
复制代码1
2
3
4
5
6
7
8
9
10<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency>
- 1
- 2
- 3
- 4
- 5
-
Gradle:
复制代码1
2
3
4
5
6compile group: 'com.baomidou', name: 'mybatis-plus-boot-starter', version: '3.4.0'
- 1
-
-
Spring MVC
-
Maven:
复制代码1
2
3
4
5
6
7
8
9
10<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.4.0</version> </dependency>
- 1
- 2
- 3
- 4
- 5
-
Gradle:
复制代码1
2
3
4
5
6compile group: 'com.baomidou', name: 'mybatis-plus', version: '3.4.0'
- 1
-
警告:引入
MyBatis-Plus
之后请不要再次引入MyBatis
以及MyBatis-Spring
,以避免因版本差异导致的问题。
1.7、开发环境
- Jdk:jdk1.8.0_261
- Idea:IntelliJ IDEA 2020.1.2 x64
- Maven:apache-maven-3.3.9
- MySQL:mysql-5.5.61-win64
第二章 MyBatis-Plus3增删改查
2.1、项目搭建
新建完成以后,打开pom.xml后添加以下依赖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
在src/mian/java目录中,创建以下包文件
- com.caochenlei.mpdemo.pojo
- com.caochenlei.mpdemo.mapper
2.2、项目配置(1)
MyBatis-Plus 的配置异常的简单,我们仅需要一些简单的配置即可使用 MyBatis-Plus 的强大功能!
-
Spring Boot 工程:
-
配置 MapperScan 注解
复制代码1
2
3
4
5
6
7
8
9
10@SpringBootApplication @MapperScan("com.caochenlei.mpdemo.mapper") public class MpDemoApplication {
复制代码<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> SpringApplication<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span>MpDemoApplication<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
-
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-
Spring MVC 工程:
-
配置 MapperScan 对象
复制代码1
2
3
4
5
6
7
8<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.caochenlei.mpdemo.mapper"/> </bean>
- 1
- 2
- 3
-
调整 SqlSessionFactory 为 MyBatis-Plus 的 SqlSessionFactory
复制代码1
2
3
4
5
6
7
8<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> </bean>
- 1
- 2
- 3
-
2.3、项目配置(2)
application.properties
复制代码1
2
3
4
5
6#mysql spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=123456
#mybatis-plus
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.4、数据导入
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26## 创建库 CREATE DATABASE mp; ## 使用库 USE mp; ## 创建表 CREATE TABLE tbl_employee( id INT(11) PRIMARY KEY AUTO_INCREMENT, last_name VARCHAR(50), email VARCHAR(50), gender CHAR(1), age INT ); ## 导入数据 INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom','tom@qq.com',1,22); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Jerry','jerry@qq.com',0,25); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Black','black@qq.com',1,30); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('White','white@qq.com',0,35); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tiger','tiger@qq.com',1,28); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Bobby','bobby@qq.com',0,16); ## 查询数据 SELECT * FROM tbl_employee;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
2.5、创建实体
com.caochenlei.mpdemo.pojo.Employee
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133@TableName("tbl_employee") public class Employee { @TableId(value = "id", type = IdType.AUTO) private Integer id; @TableField(value = "last_name") private String lastName; @TableField(value = "email") private String email; @TableField(value = "gender") private Integer gender; @TableField(value = "age") private Integer age;
复制代码<span class="token keyword">public</span> <span class="token function">Employee</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token function">Employee</span><span class="token punctuation">(</span>Integer id<span class="token punctuation">,</span> String lastName<span class="token punctuation">,</span> String email<span class="token punctuation">,</span> Integer gender<span class="token punctuation">,</span> Integer age<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span>id <span class="token operator">=</span> id<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>lastName <span class="token operator">=</span> lastName<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>email <span class="token operator">=</span> email<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>gender <span class="token operator">=</span> gender<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>age <span class="token operator">=</span> age<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> Integer <span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> id<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setId</span><span class="token punctuation">(</span>Integer id<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span>id <span class="token operator">=</span> id<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> String <span class="token function">getLastName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> lastName<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setLastName</span><span class="token punctuation">(</span>String lastName<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span>lastName <span class="token operator">=</span> lastName<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> String <span class="token function">getEmail</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> email<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setEmail</span><span class="token punctuation">(</span>String email<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span>email <span class="token operator">=</span> email<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> Integer <span class="token function">getGender</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> gender<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setGender</span><span class="token punctuation">(</span>Integer gender<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span>gender <span class="token operator">=</span> gender<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> Integer <span class="token function">getAge</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> age<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setAge</span><span class="token punctuation">(</span>Integer age<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">this</span><span class="token punctuation">.</span>age <span class="token operator">=</span> age<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@Override</span> <span class="token keyword">public</span> String <span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> <span class="token string">"Employee{"</span> <span class="token operator">+</span> <span class="token string">"id="</span> <span class="token operator">+</span> id <span class="token operator">+</span> <span class="token string">", lastName='"</span> <span class="token operator">+</span> lastName <span class="token operator">+</span> <span class="token string">'''</span> <span class="token operator">+</span> <span class="token string">", email='"</span> <span class="token operator">+</span> email <span class="token operator">+</span> <span class="token string">'''</span> <span class="token operator">+</span> <span class="token string">", gender="</span> <span class="token operator">+</span> gender <span class="token operator">+</span> <span class="token string">", age="</span> <span class="token operator">+</span> age <span class="token operator">+</span> <span class="token string">'}'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
2.6、创建接口
com.caochenlei.mpdemo.mapper.EmployeeMapper
复制代码1
2
3@Repository public interface EmployeeMapper extends BaseMapper<Employee> {
}
- 1
- 2
- 3
- 4
2.7、测试准备
com.caochenlei.mpdemo.MpDemoApplicationTests
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15@SpringBootTest class MpDemoApplicationTests { @Autowired private EmployeeMapper employeeMapper;
复制代码<span class="token annotation punctuation">@Test</span> <span class="token keyword">void</span> <span class="token function">contextLoads</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> List<span class="token generics function"><span class="token punctuation"><</span>Employee<span class="token punctuation">></span></span> employees <span class="token operator">=</span> employeeMapper<span class="token punctuation">.</span><span class="token function">selectList</span><span class="token punctuation">(</span>null<span class="token punctuation">)</span><span class="token punctuation">;</span> employees<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>System<span class="token punctuation">.</span>out<span class="token operator">:</span><span class="token operator">:</span>println<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2.8、增删改查
2.8.1、insert
需求描述:插入一个员工,员工姓名为“张三”、邮箱为"zhangsan@qq.com"、男性、25岁
复制代码1
2
3
4
5
6
7
8
9
10@Test void testInsert() { int result = employeeMapper.insert(new Employee(null, "zhangsan", "zhangsan@qq.com", 0, 25)); System.out.println("result:" + result); }
- 1
- 2
- 3
- 4
- 5
2.8.2、updateById
需求信息:将id为1的员工的姓名更改为"Jennie"
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14@Test void testUpdateById() { // 先查询 Employee employee = employeeMapper.selectById(1); employee.setLastName("Jennie"); // 再修改 int result = employeeMapper.updateById(employee); System.out.println(result); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2.8.3、selectById
需求描述:查询id为1的员工信息
复制代码1
2
3
4
5
6
7
8
9
10@Test void testSelectById() { Employee employee = employeeMapper.selectById(1); System.out.println(employee); }
- 1
- 2
- 3
- 4
- 5
2.8.4、selectByMap
需求描述:查询性别为男性(0)且年龄在25岁的员工信息
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13@Test void testSelectByMap() { Map<String, Object> map = new HashMap<>(); map.put("gender",0); map.put("age",25); List<Employee> employees = employeeMapper.selectByMap(map); employees.forEach(System.out::println); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.8.5、selectBatchIds
需求描述:查询id分别为1、2、3的员工的信息
复制代码1
2
3
4
5
6
7
8
9
10@Test void testSelectBatchIds() { List<Employee> employees = employeeMapper.selectBatchIds(Arrays.asList(1, 2, 3)); employees.forEach(System.out::println); }
- 1
- 2
- 3
- 4
- 5
2.8.6、deleteById
需求信息:删除id为1的员工信息
复制代码1
2
3
4
5
6
7
8
9
10@Test void testDeleteById() { int result = employeeMapper.deleteById(1); System.out.println(result); }
- 1
- 2
- 3
- 4
- 5
2.8.7、deleteByMap
需求描述:删除性别为男性(0)且年龄在25岁的员工信息
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13@Test void testDeleteByMap() { Map<String, Object> map = new HashMap<>(); map.put("gender", 0); map.put("age", 25); int result = employeeMapper.deleteByMap(map); System.out.println(result); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.8.8、deleteBatchIds
需求描述:删除id分别为4、5、6的员工的信息
复制代码1
2
3
4
5
6
7
8
9
10@Test void testDeleteBatchIds() { int result = employeeMapper.deleteBatchIds(Arrays.asList(4, 5, 6)); System.out.println(result); }
- 1
- 2
- 3
- 4
- 5
第三章 MyBatis-Plus3注解介绍
3.1、@TableName
描述:表名注解
属性 类型 必须指定 默认值 描述 value String 否 “” 表名 schema String 否 “” schema keepGlobalPrefix boolean 否 false 是否保持使用全局的 tablePrefix 的值(如果设置了全局 tablePrefix 且自行设置了 value 的值) resultMap String 否 “” xml 中 resultMap 的 id autoResultMap boolean 否 false 是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建并注入) 3.2、@TableId
描述:主键注解
属性 类型 必须指定 默认值 描述 value String 否 “” 主键字段名 type Enum 否 IdType.NONE 主键类型 IdType
值 描述 AUTO 数据库ID自增 NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) INPUT insert前自行set主键值 ASSIGN_ID 分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口 IdentifierGenerator
的方法nextId
(默认实现类为DefaultIdentifierGenerator
雪花算法)ASSIGN_UUID 分配UUID,主键类型为String(since 3.3.0),使用接口 IdentifierGenerator
的方法nextUUID
(默认default方法)3.3、@TableField
描述:字段注解(非主键)
属性 类型 必须指定 默认值 描述 value String 否 “” 数据库字段名 el String 否 “” 映射为原生 #{ ... }
逻辑,相当于写在 xml 里的#{ ... }
部分exist boolean 否 true 是否为数据库表字段 condition String 否 “” 字段 where
实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的%s=#{%s}
update String 否 “” 字段 update set
部分注入, 例如:update="%s+1":表示更新时会set version=version+1(该属性优先级高于el
属性)insertStrategy Enum N DEFAULT 举例:NOT_NULL: insert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#{columnProperty}</if>)
updateStrategy Enum N DEFAULT 举例:IGNORED: update table_a set column=#{columnProperty}
whereStrategy Enum N DEFAULT 举例:NOT_EMPTY: where <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if>
fill Enum 否 FieldFill.DEFAULT 字段自动填充策略 select boolean 否 true 是否进行 select 查询 keepGlobalFormat boolean 否 false 是否保持使用全局的 format 进行处理 jdbcType JdbcType 否 JdbcType.UNDEFINED JDBC类型 (该默认值不代表会按照该值生效) typeHandler Class<? extends TypeHandler> 否 UnknownTypeHandler.class 类型处理器 (该默认值不代表会按照该值生效) numericScale String 否 “” 指定小数点后保留的 FieldStrategy
值 描述 IGNORED 忽略判断 NOT_NULL 非NULL判断 NOT_EMPTY 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断) DEFAULT 追随全局配置 FieldFill
值 描述 DEFAULT 默认不处理 INSERT 插入时填充字段 UPDATE 更新时填充字段 INSERT_UPDATE 插入和更新时填充字段 3.4、@Version
描述:乐观锁注解、标记
@Verison
在字段上3.5、@EnumValue
描述:通枚举类注解(注解在枚举字段上)
3.6、@TableLogic
描述:表字段逻辑处理注解(逻辑删除)
属性 类型 必须指定 默认值 描述 value String 否 “” 逻辑未删除值 delval String 否 “” 逻辑删除值 3.7、@SqlParser
描述:租户注解,支持method上以及mapper接口上
属性 类型 必须指定 默认值 描述 filter boolean 否 false true: 表示过滤SQL解析,即不会进入ISqlParser解析链,否则会进解析链并追加例如tenant_id等条件 3.8、@KeySequence
描述:序列主键策略
oracle
属性:value、resultMap
属性 类型 必须指定 默认值 描述 value String 否 “” 序列名 clazz Class 否 Long.class id的类型, 可以指定String.class,这样返回的Sequence值是字符串"1" 第四章 MyBatis-Plus3条件构造器
4.1、数据导入
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42## 使用库 USE mp; ## 清空表 TRUNCATE TABLE tbl_employee; ## 导入数据 INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Allan0','123@qq.com',0,21); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Allan1','123@qq.com',0,22); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Allan2','123@qq.com',0,23); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Allan3','123@qq.com',0,24); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Allan4','123@qq.com',0,25); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Allan5','123@qq.com',0,26); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Allan6','123@qq.com',0,27); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Allan7','123@qq.com',0,28); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Allan8','123@qq.com',0,29); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Allan9','123@qq.com',0,30); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Baby0','123@qq.com',1,21); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Baby1','123@qq.com',0,22); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Baby2','123@qq.com',1,23); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Baby3','123@qq.com',0,24); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Baby4','123@qq.com',1,25); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Baby5','123@qq.com',0,26); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Baby6','123@qq.com',1,27); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Baby7','123@qq.com',0,28); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Baby8','123@qq.com',1,29); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Baby9','123@qq.com',0,30); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom0','123@qq.com',1,21); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom1','123@qq.com',0,22); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom2','123@qq.com',1,23); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom3','123@qq.com',0,24); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom4','123@qq.com',1,25); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom5','123@qq.com',0,26); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom6','123@qq.com',1,27); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom7','123@qq.com',0,28); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom8','123@qq.com',1,29); INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom9','123@qq.com',0,30); ## 查询数据 SELECT * FROM tbl_employee;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
4.2、构造器简介
MyBatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担, 能够有效提高开发效率,它主要用于处理 sql 拼接,排序,实体参数查询等。
注意:使用的是数据库字段,不是 Java 属性!
警告:MyBatis-Plus不支持以及不赞成在 RPC 调用中把 Wrapper 进行传输,Wrapper 很重,传输 Wrapper 可以类比为你的 controller 用 map 接收值(开发一时爽,维护火葬场),正确的 RPC 调用姿势是写一个 DTO 进行传输,被调用方再根据 DTO 执行相应的操作。
4.3、构造器使用(1)
4.3.1、带条件的查询
需求描述:查询所有姓名的包含B、且姓名为女(1)、且年龄大于24岁的员工信息
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15@Test void testSelectList1() { QueryWrapper<Employee> queryWrapper = new QueryWrapper<>(); queryWrapper .like("last_name","B") .eq("gender",1) .gt("age",24); List<Employee> employees = employeeMapper.selectList(queryWrapper); employees.forEach(System.out::println); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
需求描述:查询所有员工信息
复制代码1
2
3
4
5
6
7
8
9
10@Test void testSelectList2() { List<Employee> employees = employeeMapper.selectList(null); employees.forEach(System.out::println); }
- 1
- 2
- 3
- 4
- 5
需求描述:查询所有女生的数量(1)
复制代码1
2
3
4
5
6
7
8
9
10
11
12@Test void testSelectList3() { QueryWrapper<Employee> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("gender", 1); Integer count = employeeMapper.selectCount(queryWrapper); System.out.println(count); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4.3.2、带条件的修改
需求信息:将年龄大于25岁的女生(1)的性别修改为男生(0)
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16@Test void testUpdate() { UpdateWrapper<Employee> updateWrapper = new UpdateWrapper<>(); updateWrapper .eq("gender", 1) .gt("age", 25) ; Employee employee = new Employee(); employee.setGender(0); employeeMapper.update(employee, updateWrapper); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
4.3.3、带条件的删除
需求信息:将姓名带有“Tom”的员工信息删除
复制代码1
2
3
4
5
6
7
8
9
10
11
12@Test void testDelete() { QueryWrapper<Employee> queryWrapper = new QueryWrapper<>(); queryWrapper.like("last_name", "Tom"); int result = employeeMapper.delete(queryWrapper); System.out.println(result); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4.4、构造器使用(2)
参数说明:
- 以下出现的第一个入参
boolean condition
表示该条件是否加入最后生成的sql中 - 以下代码块内的多个方法均为从上往下补全个别
boolean
类型的入参,默认为true
- 以下出现的泛型
Param
均为Wrapper
的子类实例(均具有AbstractWrapper
的所有方法) - 以下方法在入参中出现的
R
为泛型,在普通wrapper中是String
,在LambdaWrapper中是函数(例:Entity::getId
,Entity
为实体类,getId
为字段id
的getMethod) - 以下方法入参中的
R column
均表示数据库字段,当R
具体类型为String
时则为数据库字段名(字段名是数据库关键字的自己用转义符包裹)!而不是实体类数据字段名,另当R
具体类型为SFunction
时项目runtime不支持eclipse自家的编译器 - 以下举例均为使用普通wrapper,入参为
Map
和List
的均以json
形式表现 - 使用中如果入参的
Map
或者List
为空,则不会加入最后生成的sql中
AbstractWrapper:
说明:AbstractWrapper 是 QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件,entity 属性也用于生成 sql 的 where 条件,注意 entity 生成的 where 条件与使用各个 api 生成的 where 条件没有任何关联行为
4.4.1、allEq
复制代码1
2
3
4
5
6
7
8allEq(Map<R, V> params) allEq(Map<R, V> params, boolean null2IsNull) allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
- 1
- 2
- 3
- 全部
eq
(或个别isNull
)
个别参数说明:
params
:key
为数据库字段名,value
为字段值
null2IsNull
:为true
则在map
的value
为null
时调用isNull
方法,为false
时则忽略value
为null
的- 例1:
allEq({id:1,name:"老王",age:null})
—>id = 1 and name = '老王' and age is null
- 例2:
allEq({id:1,name:"老王",age:null}, false)
—>id = 1 and name = '老王'
复制代码1
2
3
4
5
6
7
8allEq(BiPredicate<R, V> filter, Map<R, V> params) allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull) allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
- 1
- 2
- 3
个别参数说明:
filter
: 过滤函数,是否允许字段传入比对条件中
params
与null2IsNull
: 同上- 例1:
allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:null})
—>name = '老王' and age is null
- 例2:
allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:null}, false)
—>name = '老王'
4.4.2、eq
复制代码1
2
3
4
5
6
7eq(R column, Object val) eq(boolean condition, R column, Object val)
- 1
- 2
- 等于 =
- 例:
eq("name", "老王")
—>name = '老王'
4.4.3、ne
复制代码1
2
3
4
5
6
7ne(R column, Object val) ne(boolean condition, R column, Object val)
- 1
- 2
- 不等于 <>
- 例:
ne("name", "老王")
—>name <> '老王'
4.4.4、gt
复制代码1
2
3
4
5
6
7gt(R column, Object val) gt(boolean condition, R column, Object val)
- 1
- 2
- 大于 >
- 例:
gt("age", 18)
—>age > 18
4.4.5、ge
复制代码1
2
3
4
5
6
7ge(R column, Object val) ge(boolean condition, R column, Object val)
- 1
- 2
- 大于等于 >=
- 例:
ge("age", 18)
—>age >= 18
4.4.6、lt
复制代码1
2
3
4
5
6
7lt(R column, Object val) lt(boolean condition, R column, Object val)
- 1
- 2
- 小于 <
- 例:
lt("age", 18)
—>age < 18
4.4.7、le
复制代码1
2
3
4
5
6
7le(R column, Object val) le(boolean condition, R column, Object val)
- 1
- 2
- 小于等于 <=
- 例:
le("age", 18)
—>age <= 18
4.4.8、between
复制代码1
2
3
4
5
6
7between(R column, Object val1, Object val2) between(boolean condition, R column, Object val1, Object val2)
- 1
- 2
- BETWEEN 值1 AND 值2
- 例:
between("age", 18, 30)
—>age between 18 and 30
4.4.9、notBetween
复制代码1
2
3
4
5
6
7notBetween(R column, Object val1, Object val2) notBetween(boolean condition, R column, Object val1, Object val2)
- 1
- 2
- NOT BETWEEN 值1 AND 值2
- 例:
notBetween("age", 18, 30)
—>age not between 18 and 30
4.4.10、like
复制代码1
2
3
4
5
6
7like(R column, Object val) like(boolean condition, R column, Object val)
- 1
- 2
- LIKE ‘%值%’
- 例:
like("name", "王")
—>name like '%王%'
4.4.11、notLike
复制代码1
2
3
4
5
6
7notLike(R column, Object val) notLike(boolean condition, R column, Object val)
- 1
- 2
- NOT LIKE ‘%值%’
- 例:
notLike("name", "王")
—>name not like '%王%'
4.4.12、likeLeft
复制代码1
2
3
4
5
6
7likeLeft(R column, Object val) likeLeft(boolean condition, R column, Object val)
- 1
- 2
- LIKE ‘%值’
- 例:
likeLeft("name", "王")
—>name like '%王'
4.4.13、likeRight
复制代码1
2
3
4
5
6
7likeRight(R column, Object val) likeRight(boolean condition, R column, Object val)
- 1
- 2
- LIKE ‘值%’
- 例:
likeRight("name", "王")
—>name like '王%'
4.4.14、isNull
复制代码1
2
3
4
5
6
7isNull(R column) isNull(boolean condition, R column)
- 1
- 2
- 字段 IS NULL
- 例:
isNull("name")
—>name is null
4.4.15、isNotNull
复制代码1
2
3
4
5
6
7isNotNull(R column) isNotNull(boolean condition, R column)
- 1
- 2
- 字段 IS NOT NULL
- 例:
isNotNull("name")
—>name is not null
4.4.16、in
复制代码1
2
3
4
5
6
7in(R column, Collection<?> value) in(boolean condition, R column, Collection<?> value)
- 1
- 2
- 字段 IN (value.get(0), value.get(1), …)
- 例:
in("age",{1,2,3})
—>age in (1,2,3)
复制代码1
2
3
4
5
6
7in(R column, Object... values) in(boolean condition, R column, Object... values)
- 1
- 2
- 字段 IN (v0, v1, …)
- 例:
in("age", 1, 2, 3)
—>age in (1,2,3)
4.4.17、notIn
复制代码1
2
3
4
5
6
7notIn(R column, Collection<?> value) notIn(boolean condition, R column, Collection<?> value)
- 1
- 2
- 字段 NOT IN (value.get(0), value.get(1), …)
- 例:
notIn("age",{1,2,3})
—>age not in (1,2,3)
复制代码1
2
3
4
5
6
7notIn(R column, Object... values) notIn(boolean condition, R column, Object... values)
- 1
- 2
- 字段 NOT IN (v0, v1, …)
- 例:
notIn("age", 1, 2, 3)
—>age not in (1,2,3)
4.4.18、inSql
复制代码1
2
3
4
5
6
7inSql(R column, String inValue) inSql(boolean condition, R column, String inValue)
- 1
- 2
- 字段 IN ( sql语句 )
- 例:
inSql("age", "1,2,3,4,5,6")
—>age in (1,2,3,4,5,6)
- 例:
inSql("id", "select id from table where id < 3")
—>id in (select id from table where id < 3)
4.4.19、notInSql
复制代码1
2
3
4
5
6
7notInSql(R column, String inValue) notInSql(boolean condition, R column, String inValue)
- 1
- 2
- 字段 NOT IN ( sql语句 )
- 例:
notInSql("age", "1,2,3,4,5,6")
—>age not in (1,2,3,4,5,6)
- 例:
notInSql("id", "select id from table where id < 3")
—>id not in (select id from table where id < 3)
4.4.20、groupBy
复制代码1
2
3
4
5
6
7groupBy(R... columns) groupBy(boolean condition, R... columns)
- 1
- 2
- 分组:GROUP BY 字段, …
- 例:
groupBy("id", "name")
—>group by id,name
4.4.21、orderByAsc
复制代码1
2
3
4
5
6
7orderByAsc(R... columns) orderByAsc(boolean condition, R... columns)
- 1
- 2
- 排序:ORDER BY 字段, … ASC
- 例:
orderByAsc("id", "name")
—>order by id ASC,name ASC
4.4.22、orderByDesc
复制代码1
2
3
4
5
6
7orderByDesc(R... columns) orderByDesc(boolean condition, R... columns)
- 1
- 2
- 排序:ORDER BY 字段, … DESC
- 例:
orderByDesc("id", "name")
—>order by id DESC,name DESC
4.4.23、orderBy
复制代码1
2
3
4
5
6orderBy(boolean condition, boolean isAsc, R... columns)
- 1
- 排序:ORDER BY 字段, …
- 例:
orderBy(true, true, "id", "name")
—>order by id ASC,name ASC
4.4.24、having
复制代码1
2
3
4
5
6
7having(String sqlHaving, Object... params) having(boolean condition, String sqlHaving, Object... params)
- 1
- 2
- HAVING ( sql语句 )
- 例:
having("sum(age) > 10")
—>having sum(age) > 10
- 例:
having("sum(age) > {0}", 11)
—>having sum(age) > 11
4.4.25、func
复制代码1
2
3
4
5
6
7func(Consumer<Children> consumer) func(boolean condition, Consumer<Children> consumer)
- 1
- 2
- func 方法(主要方便在出现if…else下调用不同方法能不断链)
- 例:
func(i -> if(true) {i.eq("id", 1)} else {i.ne("id", 1)})
4.4.26、or
复制代码1
2
3
4
5
6
7or() or(boolean condition)
- 1
- 2
- 拼接 OR
注意事项:
主动调用
or
表示紧接着下一个方法不是用and
连接!(不调用or
则默认为使用and
连接)- 例:
eq("id",1).or().eq("name","老王")
—>id = 1 or name = '老王'
复制代码1
2
3
4
5
6
7or(Consumer<Param> consumer) or(boolean condition, Consumer<Param> consumer)
- 1
- 2
- OR 嵌套
- 例:
or(i -> i.eq("name", "李白").ne("status", "活着"))
—>or (name = '李白' and status <> '活着')
4.4.27、and
复制代码1
2
3
4
5
6
7and(Consumer<Param> consumer) and(boolean condition, Consumer<Param> consumer)
- 1
- 2
- AND 嵌套
- 例:
and(i -> i.eq("name", "李白").ne("status", "活着"))
—>and (name = '李白' and status <> '活着')
4.4.28、nested
复制代码1
2
3
4
5
6
7nested(Consumer<Param> consumer) nested(boolean condition, Consumer<Param> consumer)
- 1
- 2
- 正常嵌套 不带 AND 或者 OR
- 例:
nested(i -> i.eq("name", "李白").ne("status", "活着"))
—>(name = '李白' and status <> '活着')
4.4.29、apply
复制代码1
2
3
4
5
6
7apply(String applySql, Object... params) apply(boolean condition, String applySql, Object... params)
- 1
- 2
- 拼接 sql
注意事项:
该方法可用于数据库函数动态入参的
params
对应前面applySql
内部的{index}
部分,这样是不会有sql注入风险的,反之会有!- 例:
apply("id = 1")
—>id = 1
- 例:
apply("date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")
—>date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")
- 例:
apply("date_format(dateColumn,'%Y-%m-%d') = {0}", "2008-08-08")
—>date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")
4.4.30、last
复制代码1
2
3
4
5
6
7last(String lastSql) last(boolean condition, String lastSql)
- 1
- 2
- 无视优化规则直接拼接到 sql 的最后
注意事项:
只能调用一次,多次调用以最后一次为准,有sql注入的风险,请谨慎使用
- 例:
last("limit 1")
4.4.31、exists
复制代码1
2
3
4
5
6
7exists(String existsSql) exists(boolean condition, String existsSql)
- 1
- 2
- 拼接 EXISTS ( sql语句 )
- 例:
exists("select id from table where age = 1")
—>exists (select id from table where age = 1)
4.4.32、notExists
复制代码1
2
3
4
5
6
7notExists(String notExistsSql) notExists(boolean condition, String notExistsSql)
- 1
- 2
- 拼接 NOT EXISTS ( sql语句 )
- 例:
notExists("select id from table where age = 1")
—>not exists (select id from table where age = 1)
第五章 MyBatis-Plus3代码生成器
5.1、数据导入
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21## 删除表 DROP TABLE IF EXISTS `tbl_user`; ## 创建表 CREATE TABLE `tbl_user` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` VARCHAR(30) DEFAULT NULL COMMENT '姓名', `age` INT(11) DEFAULT NULL COMMENT '年龄', `email` VARCHAR(30) DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户'; ## 导入数据 INSERT INTO `tbl_user`(`id`,`name`,`age`,`email`) VALUES (1,'Jone',18,'test1@baomidou.com'); INSERT INTO `tbl_user`(`id`,`name`,`age`,`email`) VALUES (2,'Jack',20,'test2@baomidou.com'); INSERT INTO `tbl_user`(`id`,`name`,`age`,`email`) VALUES (3,'Tom',28,'test3@baomidou.com'); INSERT INTO `tbl_user`(`id`,`name`,`age`,`email`) VALUES (4,'Sandy',21,'test4@baomidou.com'); INSERT INTO `tbl_user`(`id`,`name`,`age`,`email`) VALUES (5,'Billie',24,'test5@baomidou.com');
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
5.2、代码生成器简介
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
5.3、代码生成器使用
5.3.1、添加依赖
pom.xml
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency>
复制代码<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>com.baomidou<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>mybatis-plus-boot-starter<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>3.4.0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>mysql<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>mysql-connector-java<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>5.1.49<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>com.baomidou<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>mybatis-plus-generator<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>3.4.0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.apache.velocity<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>velocity-engine-core<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>2.2<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.projectlombok<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>lombok<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>1.18.12<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>scope</span><span class="token punctuation">></span></span>provided<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>scope</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span>
</dependencies>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40<build> <!-- 插件管理 --> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.5</version> </plugin> </plugins> <!-- 资源管理 --> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.conf</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.conf</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
5.3.2、添加配置
application.properties
复制代码1
2
3#server server.port=8080
#mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456#mybatis-plus
mybatis-plus.mapper-locations=classpath*????*/mapper/xml/*.xml
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
5.3.3、启动配置
MpDemoApplication.java
复制代码1
2
3
4
5
6
7
8
9
10@SpringBootApplication @MapperScan("com.caochenlei.mpdemo.mapper") public class MpDemoApplication {
复制代码<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> SpringApplication<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span>MpDemoApplication<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
5.3.4、代码生成
CodeGenerator.java
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130public class CodeGenerator {
复制代码<span class="token keyword">public</span> <span class="token keyword">static</span> String <span class="token function">scanner</span><span class="token punctuation">(</span>String tip<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> Scanner scanner <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Scanner</span><span class="token punctuation">(</span>System<span class="token punctuation">.</span>in<span class="token punctuation">)</span><span class="token punctuation">;</span> StringBuilder help <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">StringBuilder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> help<span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token string">"请输入"</span> <span class="token operator">+</span> tip <span class="token operator">+</span> <span class="token string">":"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>help<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>scanner<span class="token punctuation">.</span><span class="token function">hasNext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> String ipt <span class="token operator">=</span> scanner<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>StringUtils<span class="token punctuation">.</span><span class="token function">isNotBlank</span><span class="token punctuation">(</span>ipt<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> ipt<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">MybatisPlusException</span><span class="token punctuation">(</span><span class="token string">"请输入正确的"</span> <span class="token operator">+</span> tip <span class="token operator">+</span> <span class="token string">"!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 代码生成器</span> AutoGenerator mpg <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AutoGenerator</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 全局配置</span> GlobalConfig gc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">GlobalConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> String projectPath <span class="token operator">=</span> System<span class="token punctuation">.</span><span class="token function">getProperty</span><span class="token punctuation">(</span><span class="token string">"user.dir"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> gc<span class="token punctuation">.</span><span class="token function">setOutputDir</span><span class="token punctuation">(</span>projectPath <span class="token operator">+</span> <span class="token string">"/src/main/java"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//设置代码生成路径</span> gc<span class="token punctuation">.</span><span class="token function">setFileOverride</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//是否覆盖以前文件</span> gc<span class="token punctuation">.</span><span class="token function">setOpen</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//是否打开生成目录</span> gc<span class="token punctuation">.</span><span class="token function">setAuthor</span><span class="token punctuation">(</span><span class="token string">"caochenlei"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//设置项目作者名称</span> gc<span class="token punctuation">.</span><span class="token function">setIdType</span><span class="token punctuation">(</span>IdType<span class="token punctuation">.</span>AUTO<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//设置主键策略</span> gc<span class="token punctuation">.</span><span class="token function">setBaseResultMap</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//生成基本ResultMap</span> gc<span class="token punctuation">.</span><span class="token function">setBaseColumnList</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//生成基本ColumnList</span> gc<span class="token punctuation">.</span><span class="token function">setServiceName</span><span class="token punctuation">(</span><span class="token string">"%sService"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//去掉服务默认前缀</span> mpg<span class="token punctuation">.</span><span class="token function">setGlobalConfig</span><span class="token punctuation">(</span>gc<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 数据源配置</span> DataSourceConfig dsc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataSourceConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> dsc<span class="token punctuation">.</span><span class="token function">setUrl</span><span class="token punctuation">(</span><span class="token string">"jdbc:mysql://localhost:3306/mp?useSSL=false&useUnicode=true&characterEncoding=utf8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> dsc<span class="token punctuation">.</span><span class="token function">setDriverName</span><span class="token punctuation">(</span><span class="token string">"com.mysql.jdbc.Driver"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> dsc<span class="token punctuation">.</span><span class="token function">setUsername</span><span class="token punctuation">(</span><span class="token string">"root"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> dsc<span class="token punctuation">.</span><span class="token function">setPassword</span><span class="token punctuation">(</span><span class="token string">"123456"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> mpg<span class="token punctuation">.</span><span class="token function">setDataSource</span><span class="token punctuation">(</span>dsc<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 包配置</span> PackageConfig pc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">PackageConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pc<span class="token punctuation">.</span><span class="token function">setParent</span><span class="token punctuation">(</span><span class="token string">"com.caochenlei.mpdemo"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pc<span class="token punctuation">.</span><span class="token function">setMapper</span><span class="token punctuation">(</span><span class="token string">"mapper"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pc<span class="token punctuation">.</span><span class="token function">setXml</span><span class="token punctuation">(</span><span class="token string">"mapper.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pc<span class="token punctuation">.</span><span class="token function">setEntity</span><span class="token punctuation">(</span><span class="token string">"pojo"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pc<span class="token punctuation">.</span><span class="token function">setService</span><span class="token punctuation">(</span><span class="token string">"service"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pc<span class="token punctuation">.</span><span class="token function">setServiceImpl</span><span class="token punctuation">(</span><span class="token string">"service.impl"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pc<span class="token punctuation">.</span><span class="token function">setController</span><span class="token punctuation">(</span><span class="token string">"controller"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> mpg<span class="token punctuation">.</span><span class="token function">setPackageInfo</span><span class="token punctuation">(</span>pc<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 策略配置</span> StrategyConfig sc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">StrategyConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> sc<span class="token punctuation">.</span><span class="token function">setNaming</span><span class="token punctuation">(</span>NamingStrategy<span class="token punctuation">.</span>underline_to_camel<span class="token punctuation">)</span><span class="token punctuation">;</span> sc<span class="token punctuation">.</span><span class="token function">setColumnNaming</span><span class="token punctuation">(</span>NamingStrategy<span class="token punctuation">.</span>underline_to_camel<span class="token punctuation">)</span><span class="token punctuation">;</span> sc<span class="token punctuation">.</span><span class="token function">setEntityLombokModel</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> sc<span class="token punctuation">.</span><span class="token function">setRestControllerStyle</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> sc<span class="token punctuation">.</span><span class="token function">setControllerMappingHyphenStyle</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> sc<span class="token punctuation">.</span><span class="token function">setTablePrefix</span><span class="token punctuation">(</span><span class="token string">"tbl_"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> sc<span class="token punctuation">.</span><span class="token function">setInclude</span><span class="token punctuation">(</span><span class="token function">scanner</span><span class="token punctuation">(</span><span class="token string">"表名,多个英文逗号分割"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">","</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> mpg<span class="token punctuation">.</span><span class="token function">setStrategy</span><span class="token punctuation">(</span>sc<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 生成代码</span> mpg<span class="token punctuation">.</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
5.3.5、工程结构
5.3.6、添加代码
UserController.java
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService;
复制代码<span class="token annotation punctuation">@RequestMapping</span><span class="token punctuation">(</span><span class="token string">"/all"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> List<span class="token generics function"><span class="token punctuation"><</span>User<span class="token punctuation">></span></span> <span class="token function">getAll</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> userService<span class="token punctuation">.</span><span class="token function">list</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
5.3.7、启动运行
MpDemoApplication.java 中运行主方法以此来启动整个工程
复制代码1
2
3
4
5
6
7
8
9
10@SpringBootApplication @MapperScan("com.caochenlei.mpdemo.mapper") public class MpDemoApplication {
复制代码<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> SpringApplication<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span>MpDemoApplication<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
5.3.8、测试方法
使用浏览器打开:http://localhost:8080/user/all
5.3.9、温馨提示
需要Lombok插件支持,只需要安装一下就可以了,打开 IDEA,进入 File -> Settings -> Plugins,安装完成后重启
5.4、代码生成器方法
通用 Service CRUD 封装 IService 接口,进一步封装 CRUD 采用
get 查询单行
remove 删除
list 查询集合
page 分页
前缀命名方式区分Mapper
层避免混淆,泛型 T 为任意实体对象,建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类,对象 Wrapper 为 条件构造器。5.4.1、save
复制代码1
2
3
4
5
6
7
8
9
10
11// 插入一条记录(选择字段,策略插入) boolean save(T entity); // 插入(批量) boolean saveBatch(Collection<T> entityList); // 插入(批量) boolean saveBatch(Collection<T> entityList, int batchSize);
- 1
- 2
- 3
- 4
- 5
- 6
参数说明:
类型 参数名 描述 T entity 实体对象 Collection<T> entityList 实体对象集合 int batchSize 插入批次数量 5.4.2、saveOrUpdate
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13// TableId 注解存在更新记录,否插入一条记录 boolean saveOrUpdate(T entity); // 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法 boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
参数说明:
类型 参数名 描述 T entity 实体对象 Wrapper<T> updateWrapper 实体对象封装操作类 UpdateWrapper Collection<T> entityList 实体对象集合 int batchSize 插入批次数量 5.4.3、remove
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13// 根据 entity 条件,删除记录 boolean remove(Wrapper<T> queryWrapper); // 根据 ID 删除 boolean removeById(Serializable id); // 根据 columnMap 条件,删除记录 boolean removeByMap(Map<String, Object> columnMap); // 删除(根据ID 批量删除) boolean removeByIds(Collection<? extends Serializable> idList);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
参数说明:
类型 参数名 描述 Wrapper<T> queryWrapper 实体包装类 QueryWrapper Serializable id 主键ID Map<String, Object> columnMap 表字段 map 对象 Collection<? extends Serializable> idList 主键ID列表 5.4.4、update
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset boolean update(Wrapper<T> updateWrapper); // 根据 whereEntity 条件,更新记录 boolean update(T entity, Wrapper<T> updateWrapper); // 根据 ID 选择修改 boolean updateById(T entity); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList, int batchSize);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
参数说明:
类型 参数名 描述 Wrapper<T> updateWrapper 实体对象封装操作类 UpdateWrapper T entity 实体对象 Collection<T> entityList 实体对象集合 int batchSize 更新批次数量 5.4.5、get
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 根据 ID 查询 T getById(Serializable id); // 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1") T getOne(Wrapper<T> queryWrapper); // 根据 Wrapper,查询一条记录 T getOne(Wrapper<T> queryWrapper, boolean throwEx); // 根据 Wrapper,查询一条记录 Map<String, Object> getMap(Wrapper<T> queryWrapper); // 根据 Wrapper,查询一条记录 <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
参数说明:
类型 参数名 描述 Serializable id 主键ID Wrapper<T> queryWrapper 实体对象封装操作类 QueryWrapper boolean throwEx 有多个 result 是否抛出异常 T entity 实体对象 Function<? super Object, V> mapper 转换函数 5.4.6、list
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// 查询所有 List<T> list(); // 查询列表 List<T> list(Wrapper<T> queryWrapper); // 查询(根据ID 批量查询) Collection<T> listByIds(Collection<? extends Serializable> idList); // 查询(根据 columnMap 条件) Collection<T> listByMap(Map<String, Object> columnMap); // 查询所有列表 List<Map<String, Object>> listMaps(); // 查询列表 List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 查询全部记录 List<Object> listObjs(); // 查询全部记录 <V> List<V> listObjs(Function<? super Object, V> mapper); // 根据 Wrapper 条件,查询全部记录 List<Object> listObjs
最后
以上就是专注大象最近收集整理的关于mybatis的全部内容,更多相关mybatis内容请搜索靠谱客的其他文章。
发表评论 取消回复