代码下载:https://github.com/Jackson0714/study-mybatis-plus.git
mybatis-plus的查询功能非常强大, 上一篇,我们通过例题的方式讲解了mybatis-plus的高级查询功能:条件查询,这一篇我们继续以例题的方式讲解mybatis-plus的高级查询功能。
准备数据
#创建用户表
CREATE TABLE user (
id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主键',
name VARCHAR(30) DEFAULT NULL COMMENT '姓名',
age INT(11) DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
manager_id BIGINT(20) DEFAULT NULL COMMENT '直属上级id',
create_time DATETIME DEFAULT NULL COMMENT '创建时间',
CONSTRAINT manager_fk FOREIGN KEY (manager_id)
REFERENCES user (id)
) ENGINE=INNODB CHARSET=UTF8;
#初始化数据:
INSERT INTO user (id, name, age, email, manager_id
, create_time)
VALUES (1087982257332887553, '大boss', 40, 'boss@baomidou.com', NULL, '2019-01-11 14:20:20'),
(1088248166370832385, '王天风', 25, 'wtf@baomidou.com', 1087982257332887553, '2019-02-05 11:12:22'),
(1088250446457389058, '李艺伟', 28, 'lyw@baomidou.com', 1088248166370832385, '2019-02-14 08:31:16'),
(1094590409767661570, '张雨琪', 31, 'zjq@baomidou.com', 1088248166370832385, '2019-01-14 09:15:15'),
(1094592041087729666, '刘红雨', 32, 'lhm@baomidou.com', 1088248166370832385, '2019-01-14 09:48:16');
User
表结构如下:
id | name | age | manager_id | create_time | ||
---|---|---|---|---|---|---|
1 | Jone | 18 | test1@baomidou.com | null | 2020-01-01 14:20:20 | 2020-01-01 14:20:20 |
2020-01-01 14:20:20 | ||||||
2 | Jack | 20 | test2@baomidou.com | 1 | 2020-01-20 14:20:20 | 2020-01-20 14:20:20 |
2020-01-20 14:20:20 | ||||||
3 | Tom | 28 | test3@baomidou.com | 2 | 2020-01-15 14:20:20 | 2020-01-15 14:20:20 |
2020-01-15 14:20:20 | ||||||
4 | Sandy | 21 | test4@baomidou.com | 2 | 2020-01-12 14:20:20 | 2020-01-12 14:20:20 |
2020-01-12 14:20:20 | ||||||
5 | Billie | 24 | test5@baomidou.com | 2 | 2020-01-22 14:20:20 | 2020-01-22 14:20:20 |
2020-01-22 14:20:20 |
难度系数 ★★★
难度系数 ★★★
难度系数 ★
难度系数 ★★
难度系数 ★★★
考察 and 嵌套
1 /*
2 * 描述:例1.5 查询名字为"J"开头并且满足条件:年龄小于20或邮箱不为空
3 * SQL语句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE (name LIKE 'J%' AND ( (age < 20 OR email IS NOT NULL) ))
4 * 作者:博客园-悟空聊架构
5 * 时间:2019-01-31
6 * Github:https://github.com/Jackson0714/study-mybatis-plus.git
7 * 博客园:https://www.cnblogs.com/jackson0714
8 * */
9 @Test
10 public void testSelectByQueryWrapper5() {
11 System.out.println(("----- 名字为'J'开头并且(年龄小于20或邮箱不为空) ------"));
12 QueryWrapper<User> queryWrapper = new QueryWrapper<>();
13 queryWrapper.likeRight("name", "J").and(qw->qw.lt("age", 20).or().isNotNull("email"));
14 List<User> userList = userMapper.selectList(queryWrapper);
15 userList.forEach(System.out::println);
16 }
查询日志:
查询结果:
难度系数 ★★★
考察 nested 用法
1 /*
2 * 描述:例1.6 查询年龄小于20或邮箱不为空且满足条件:名字为"J"开头
3 * SQL语句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE (( (age < 20 OR email IS NOT NULL)) AND name LIKE 'J%')
4 * 作者:博客园-悟空聊架构
5 * 时间:2019-01-31
6 * Github:https://github.com/Jackson0714/study-mybatis-plus.git
7 * 博客园:https://www.cnblogs.com/jackson0714
8 * */
9 @Test
10 public void testSelectByQueryWrapper6() {
11 System.out.println(("----- 名字为'J'开头并且(年龄小于20或邮箱不为空) ------"));
12 QueryWrapper<User> queryWrapper = new QueryWrapper<>();
13 queryWrapper.nested(qw->qw.lt("age", 20).or().isNotNull("email"))
14 .likeRight("name", "J");
15 List<User> userList = userMapper.selectList(queryWrapper);
16 userList.forEach(System.out::println);
17 }
查询日志:
查询结果
难度系数 ★
考察 in 用法
1 /*
2 * 描述:例1.7 查询年龄为20、21、25、26的用户
3 * SQL语句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE age IN (20,21,25,26)
4 * 作者:博客园-悟空聊架构
5 * 时间:2019-01-31
6 * Github:https://github.com/Jackson0714/study-mybatis-plus.git
7 * 博客园:https://www.cnblogs.com/jackson0714
8 * */
9 @Test
10 public void testSelectByQueryWrapper7() {
11 System.out.println(("----- 名字为'J'开头并且(年龄小于20或邮箱不为空) ------"));
12 QueryWrapper<User> queryWrapper = new QueryWrapper<>();
13 queryWrapper.in("age", Arrays.asList(20,21,25,26));
14 List<User> userList = userMapper.selectList(queryWrapper);
15 userList.forEach(System.out::println);
16 }
查询结果
难度系数 ★★
考察 last 和 limit 用法
1 /*
2 * 描述:例1.8 查询年龄为20、21、25、26的用户,且只需返回第一条记录
3 * SQL语句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE age IN (20,21,25,26)
4 * 作者:博客园-悟空聊架构
5 * 时间:2019-01-31
6 * Github:https://github.com/Jackson0714/study-mybatis-plus.git
7 * 博客园:https://www.cnblogs.com/jackson0714
8 * */
9 @Test
10 public void testSelectByQueryWrapper8() {
11 System.out.println(("----- 查询年龄为20、21、25、26的用户,且只需返回第一条记录 ------"));
12 QueryWrapper<User> queryWrapper = new QueryWrapper<>();
13 queryWrapper.in("age", Arrays.asList(20,21,25,26)).last("limit 1");
14 List<User> userList = userMapper.selectList(queryWrapper);
15 userList.forEach(System.out::println);
16 }
查询日志:
查询结果: