每天玩转3分钟 MyBatis-Plus - 1. 配置环境

每天玩转3分钟 MyBatis-Plus - 2. 普通查询

每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一)

每天玩转3分钟 MyBatis-Plus - 4. 高级查询(二)

每天玩转3分钟 MyBatis-Plus - 5. 高级查询(三)

代码下载: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 email manager_id create_time
1 Jone 18 test1@baomidou.com null
2020-01-01 14:20:20
2 Jack 20 test2@baomidou.com 1
2020-01-20 14:20:20
3 Tom 28 test3@baomidou.com 2
2020-01-15 14:20:20
4 Sandy 21 test4@baomidou.com 2
2020-01-12 14:20:20
5 Billie 24 test5@baomidou.com 2
2020-01-22 14:20:20

一、案例汇总(第三波)

1.1 查询名字为"J"开头并且满足条件:年龄小于20或邮箱不为空

难度系数 ★★★

1.2 查询年龄小于20或邮箱不为空且满足条件:名字为"J"开头

难度系数 ★★★

1.3 查询年龄为20、21、25、26的用户

难度系数 ★

1.4 查询年龄为20、21、25、26的用户,且只需返回第一条记录

难度系数 ★★

二、案例讲解

1.1 查询名字为"J"开头并且满足条件:年龄小于20或邮箱不为空

难度系数 ★★★

考察 and 嵌套

 /*
* 描述:例1.5 查询名字为"J"开头并且满足条件:年龄小于20或邮箱不为空
* SQL语句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE (name LIKE 'J%' AND ( (age < 20 OR email IS NOT NULL) ))
* 作者:博客园-悟空聊架构
* 时间:2019-01-31
* Github:https://github.com/Jackson0714/study-mybatis-plus.git
* 博客园:https://www.cnblogs.com/jackson0714
* */
@Test
public void testSelectByQueryWrapper5() {
System.out.println(("----- 名字为'J'开头并且(年龄小于20或邮箱不为空) ------"));
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.likeRight("name", "J").and(qw->qw.lt("age", 20).or().isNotNull("email"));
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}

查询日志:

查询结果:

1.2 查询年龄小于20或邮箱不为空且满足条件:名字为"J"开头

难度系数 ★★★

考察 nested 用法

 /*
* 描述:例1.6 查询年龄小于20或邮箱不为空且满足条件:名字为"J"开头
* SQL语句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE (( (age < 20 OR email IS NOT NULL)) AND name LIKE 'J%')
* 作者:博客园-悟空聊架构
* 时间:2019-01-31
* Github:https://github.com/Jackson0714/study-mybatis-plus.git
* 博客园:https://www.cnblogs.com/jackson0714
* */
@Test
public void testSelectByQueryWrapper6() {
System.out.println(("----- 名字为'J'开头并且(年龄小于20或邮箱不为空) ------"));
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.nested(qw->qw.lt("age", 20).or().isNotNull("email"))
.likeRight("name", "J");
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}

查询日志:

查询结果

1.3 查询年龄为20、21、25、26的用户

难度系数 ★

考察 in 用法

 /*
* 描述:例1.7 查询年龄为20、21、25、26的用户
* SQL语句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE age IN (20,21,25,26)
* 作者:博客园-悟空聊架构
* 时间:2019-01-31
* Github:https://github.com/Jackson0714/study-mybatis-plus.git
* 博客园:https://www.cnblogs.com/jackson0714
* */
@Test
public void testSelectByQueryWrapper7() {
System.out.println(("----- 名字为'J'开头并且(年龄小于20或邮箱不为空) ------"));
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in("age", Arrays.asList(20,21,25,26));
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}

查询结果

1.4 查询年龄为20、21、25、26的用户,且只需返回第一条记录

难度系数 ★★

考察 last 和 limit 用法

 /*
* 描述:例1.8 查询年龄为20、21、25、26的用户,且只需返回第一条记录
* SQL语句:SELECT id,name,age,email,manager_id,create_time FROM user WHERE age IN (20,21,25,26)
* 作者:博客园-悟空聊架构
* 时间:2019-01-31
* Github:https://github.com/Jackson0714/study-mybatis-plus.git
* 博客园:https://www.cnblogs.com/jackson0714
* */
@Test
public void testSelectByQueryWrapper8() {
System.out.println(("----- 查询年龄为20、21、25、26的用户,且只需返回第一条记录 ------"));
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in("age", Arrays.asList(20,21,25,26)).last("limit 1");
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}

查询日志:

查询结果:

每天玩转3分钟 MyBatis-Plus - 1. 配置环境

每天玩转3分钟 MyBatis-Plus - 2. 普通查询

每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一)

每天玩转3分钟 MyBatis-Plus - 4. 高级查询(二)

每天玩转3分钟 MyBatis-Plus - 5. 高级查询(三)

关注公众号:悟空聊架构,回复pmp,领取pmp资料!回复悟空,领取架构师资料!

作  者:悟空聊架构 
出  处:http://www.cnblogs.com/jackson0714/ 
关于作者:专注于移动开发。如有问题或建议,请多多赐教! 
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。 
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我 
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!

悟空聊架构 

关注我,带你每天进步一点点!

每天玩转3分钟 MyBatis-Plus - 5. 高级查询(三)(条件构造器)的更多相关文章

  1. mybatis中的高级查询

    Mybatis作为一个ORM框架,肯定是支持sql高级查询的. 下面的一个案例来为大家详细讲解mybatis中的高级查询. 案例说明: 此案例的业务关系是用户,订单,订单详情与商品之间的关系. 以订单 ...

  2. 使用MyBatis的resultMap高级查询时常用的方式总结

    以下内容已经通过楼主测试, 从pd设计数据库到测试完成, 之前楼主也没有过Mybatis 使用resultMap觉得有点乱,最近抽出时间总结了一下也算对MyBatis的resultMap进行一次系统的 ...

  3. 每天玩转3分钟 MyBatis-Plus - 2. 普通查询

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 mybatis-plus的查询功能非常强大, 这一篇,我们来看下mybati ...

  4. 每天玩转3分钟 MyBatis-Plus - 1. 配置环境

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 ...

  5. 每天玩转3分钟 MyBatis-Plus - 4. 高级查询(二)(条件构造器)

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一) 每天玩转 ...

  6. 每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一)(条件构造器)

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 每天玩转3分钟 MyBatis-Plus - 3. 高级查询 代码下载:ht ...

  7. 每天玩转3分钟 MyBatis-Plus - 6. select 用法

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一) 每天玩转 ...

  8. MyBatis 高级查询环境准备(八)

    MyBatis 高级查询 之前在学习 Mapper XML 映射文件时,说到 resultMap 标记是 MyBatis 中最重要最强大也是最复杂的标记,而且还提到后面会详细介绍它的高级用法. 听到高 ...

  9. MyBatis实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

随机推荐

  1. 错误 1 未能找到类型或命名空间名称“”, 引入DLL文件出现提示文件不存在问题

    在所有引入都正确的情况下,查看项目目标框架是否正确

  2. STM32与STM8操作寄存器的区别

    在STM8中,由于STM8寄存器较少,在头文件中定义寄存器的时候不用采取任何形式的封装,所以操作寄存器的时候直接可以用如下方式处理:PB_DDR |=0x20; 但是在STM32中,由于其寄存器实在太 ...

  3. AutoCad .Net二次开发求两曲线最小距离

    测试结果: 主要思路:假设有两条曲线分别是c1和c2,把c1按照1的距离划分我这里用变量jd表示,得到一个曲线集合coll,然后遍历coll,得到coll中每一个曲线的两个端点,再用这两个端点分别求离 ...

  4. Java方法的参数传递是值传递还是引用传递?

    当基本数据类型(Boolean,byte,char,String,int,Long,float,double)作为参数传递时,传递的是实参值的副本,即传的是值,无论在函数中怎么操作这个副本,实参的值是 ...

  5. $POJ2311\ Cutting\ Game$ 博弈论

    正解:博弈论 解题报告: 传送门! 首先看到说,谁先$balabala$,因为$SG$函数是无法解决这类问题的,于是考虑转化成"不能操作者赢/输"的问题,不难想到先剪出$1\cdo ...

  6. 如何根据HttpServletRequets获取用户真实IP地址

    最近的一个项目的某个功能获取用户的ip地址,添加用户的系统使用记录. 我发现当我直接使用getRemoteAddr()方法从HttpServletRequet中获取用户的ip时,获取到的是服务器的ip ...

  7. SpringBoot基础架构篇1(SpringBoot、MyBatis-Plus与Thymeleaf)

    show me the code and talk to me,做的出来更要说的明白 我是布尔bl,你的支持是我分享的动力! 1 引入 使用 MyBatis-Plus 以及 thymeleaf 实现增 ...

  8. Pillow库来着

    第一步肯定是安装啦 pip install pillow 如果安装报错,可以升级一下pip库,因为有可能是pip版本低了......... pip show pip 升级用 python -m pip ...

  9. Intellij IDEA 导入eclipse 项目

    HoJe一个会rep的程序猿 . 感谢2019 时间匆匆,一转眼2019要跟我们说再见了.我们怀有太多的期望就难免遭遇失望和挫折.我们遇到了困难,往往不是想办法去解决,而是抱怨这个命运的不公.如果生活 ...

  10. Hadoop以及组件介绍

    一.背景介绍 在接触过大数据相关项目的时候常常都会听到Hadoop这个东西,简单来说,他是一个用分布式计算来处理大数据的开源软件,下面包含了许多的组件和子项目,这篇文章将会介绍Hadoop的原理以及一 ...