每天玩转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的高级查询功能。

准备数据

  1. #创建用户表
  2. CREATE TABLE user (
  3. id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主键',
  4. name VARCHAR(30) DEFAULT NULL COMMENT '姓名',
  5. age INT(11) DEFAULT NULL COMMENT '年龄',
  6. email VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
  7. manager_id BIGINT(20) DEFAULT NULL COMMENT '直属上级id',
  8. create_time DATETIME DEFAULT NULL COMMENT '创建时间',
  9. CONSTRAINT manager_fk FOREIGN KEY (manager_id)
  10. REFERENCES user (id)
  11. ) ENGINE=INNODB CHARSET=UTF8;
  12.  
  13. #初始化数据:
  14. INSERT INTO user (id, name, age, email, manager_id
  15. , create_time)
  16. VALUES (1087982257332887553, '大boss', 40, 'boss@baomidou.com', NULL, '2019-01-11 14:20:20'),
  17. (1088248166370832385, '王天风', 25, 'wtf@baomidou.com', 1087982257332887553, '2019-02-05 11:12:22'),
  18. (1088250446457389058, '李艺伟', 28, 'lyw@baomidou.com', 1088248166370832385, '2019-02-14 08:31:16'),
  19. (1094590409767661570, '张雨琪', 31, 'zjq@baomidou.com', 1088248166370832385, '2019-01-14 09:15:15'),
  20. (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. /*
  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. }

查询日志:

查询结果:

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

难度系数 ★★★

考察 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. }

查询日志:

查询结果

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

难度系数 ★

考察 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. }

查询结果

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

难度系数 ★★

考察 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. }

查询日志:

查询结果:

每天玩转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. Kafka Eagle安装详情及问题解答

    1.概述 最近有很多同学给笔者留言,说在安装Kafka Eagle的时候,会遇到一些问题,请教如何解决?今天笔者就在这里总结一下安装步骤,和一些安装的注意事项,以及解决方式. 2.内容 在安装Kafk ...

  2. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(一)

    在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>,<Git+Gitlab+Ansi ...

  3. 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(二)

    开心一刻 一头母牛在吃草,突然一头公牛从远处狂奔而来说:“快跑啊!!楼主来了!” 母牛说:“楼主来了关我屁事啊?” 公牛急忙说:“楼主吹牛逼呀!” 母牛大惊,拔腿就跑,边跑边问:“你是公牛你怕什么啊? ...

  4. 聊聊多线程那一些事儿(task)之 三 异步取消和异步方法

    hello,咋们又见面啦,通过前面两篇文章的介绍,对task的创建.运行.阻塞.同步.延续操作等都有了很好的认识和使用,结合实际的场景介绍,这样一来在实际的工作中也能够解决很大一部分的关于多线程的业务 ...

  5. layui中使用自定义数据格式对数据表格进行渲染

    1.引入 <link rel="stylesheet" href="../layui/css/layui.css"> <script src= ...

  6. [梁山好汉说IT] 如何理解一致性Hash

    [梁山好汉说IT] 如何理解一致性Hash 0x00 摘要 用梁山酒店分配客人为例来理解一致性Hash. 0x01. 与经典哈希方法的对比 经典哈希方法:总是假设内存位置的数量是已知且固定不变的.因为 ...

  7. layui treeSelect

    官方地址:https://fly.layui.com/extend/treeSelect/ 下面介绍一下这个插件的使用方法 1.html页面 <div class="layui-inp ...

  8. Spring Boot (5) 整合 RabbitMQ

    一.前言 RabbitMQ是实现了AMQP(高级消息队列协议)的开源消息中间件,RabbitMQ服务器是用Erlang(面向并发的编程语言)编写的. RabbitMQ官网下载地址:https://ww ...

  9. drop-out栈

    1.drop-out栈能够用来做什么? 在许多提供编辑功能的软件,如word.ps.画图,都会提供“撤销”和“恢复”功能,使用drop-out能够实现这些功能. 2.drop-out栈特性 drop- ...

  10. 「Poj1845」Sumdiv 解题报告

    题面戳这里 啥都别看,只是求 \(a^b\)所有的因数的和 思路: 真没想到! 其实我们可以先将\(a^b\)分解成质因数的 因为\(a^b\)的因数肯定是\(a^b\)的质因数在一定的条件下相乘而成 ...