Mybatis-plus<三> MybatisPlus条件构造器

Demo GitHub下载地址:https://github.com/RJvon/Mybatis_plus_demo

Mybatis-plus条件构造器: https://mp.baomidou.com/guide/wrapper.html#链式调用-lambda-式

*条件构造器关系介绍*

*wapper介绍 :*

  • Wrapper : 条件构造抽象类,最顶端父类

---AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件

-------QueryWrapper : Entity 对象封装操作类,不是用lambda语法

-------UpdateWrapper : Update 条件封装,用于Entity对象更新操作

---AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column

-------LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper

-------LambdaUpdateWrapper : Lambda 更新封装Wrapper

以demo中的数据表为例介绍条件构造器使用:

allEq

  1. allEq(Map<R, V> params)
  2. allEq(Map<R, V> params, boolean null2IsNull)
  3. allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
  • 全部eq(或个别isNull)

    个别参数说明:

    params : key为数据库字段名,value为字段值

    null2IsNull : 为true则在mapvaluenull时调用 [isNull]方法,为false时则忽略valuenull

  • 例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. @Test
  2. public void testAllEq() {
  3. Map<String, Object> params = new HashMap<>();
  4. params.put("sex", "f");
  5. params.put("age", "19");
  6. params.put("address", null);
  7. QueryWrapper<Student> wrapper = new QueryWrapper<>();
  8. //1,2,3,4仅保留一项,其余注释掉
  9. //1.全部匹配params条件
  10. wrapper.allEq(params);
  11. //2.全部匹配params条件(为null的不作为条件)
  12. wrapper.allEq(params, false);
  13. //3.只有params中k.equals("sex")或者k.equals("id")才作为条件
  14. wrapper.allEq((k, v) -> (k.equals("sex") || k.equals("id")), params);
  15. //4.只有params中k.equals("sex")或者k.equals("id")或者k.equals("name")才作为条件
  16. wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id") || k.equals("name")), params);
  17. List<Student> students = this.studentMapper.selectList(wrapper);
  18. for (Student student : students) {
  19. System.out.println(student);
  20. }
  21. }

eq

  1. eq(R column, Object val)
  2. eq(boolean condition, R column, Object val)
  • 等于 =

  • 例: eq("name", "老王")--->`name = '老王'

    1. @Test
    2. public void testEq() {
    3. //department==english && age==16 sex==f
    4. QueryWrapper<Student> wrapper = new QueryWrapper<>();
    5. wrapper.eq("department", "english")
    6. .ge("age", "16")
    7. .in("sex", "f");

like/notlike

  1. like(R column, Object val)
  2. like(boolean condition, R column, Object val)
  • LIKE '%值%'
  • 例: like("name", "王")--->name like '%王%'
  1. @Test
  2. public void testLike() {
  3. QueryWrapper<Student> wrapper = new QueryWrapper<>();
  4. //姓名叫l某某
  5. wrapper.likeRight("name", "l");
  6. List<Student> students = this.studentMapper.selectList(wrapper);
  7. for (Student student : students) {
  8. System.out.println(student);
  9. }
  10. }

gt/lt/le/ne/ge……

eq 等于 =
gt 大于 >
lt 小于 <
le 小于等于 <=
ne 不等于 <>
ge 大于等于 >=
in 字段 IN (value.get(0), value.get(1), …)
notIn 字段 NOT IN (v0, v1, …)
between BETWEEN 值1 AND 值2
notBetween NOT BETWEEN 值1 AND 值2
  1. @Test
  2. public void selectWrapper04() {
  3. //姓名叫l某某,并且(年龄小于24或者地址不为空)
  4. QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
  5. queryWrapper.likeRight("name", "l");
  6. queryWrapper.and(qw -> qw.lt("age", 24).or().isNotNull("address"));
  7. List list = studentMapper.selectList(queryWrapper);
  8. list.forEach(System.out::println);
  9. }
  10. @Test
  11. public void selectWrapper05() {
  12. //年龄等于21,22,28
  13. QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
  14. queryWrapper.in("age", Arrays.asList(21, 22, 28));
  15. List<Student> users = studentMapper.selectList(queryWrapper);
  16. users.forEach(System.out::println);
  17. }
  18. /**
  19. * 筛选年龄=21, 22, 28的人,返回一条数据
  20. */
  21. @Test
  22. public void selectWrapper08() {
  23. QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
  24. queryWrapper.in("age", Arrays.asList(21, 26, 28)).last("limit 1");
  25. List<Student> users = studentMapper.selectList(queryWrapper);
  26. users.forEach(System.out::println);
  27. }

or

  1. @Test
  2. public void testOr() {
  3. //姓名叫zhujiao,或者年龄等于21
  4. QueryWrapper<Student> wrapper = new QueryWrapper<>();
  5. wrapper.eq("name", "zhujiao").or().eq("age", 21);
  6. List<Student> students = this.studentMapper.selectList(wrapper);
  7. for (Student student : students) {
  8. System.out.println(student);
  9. }
  10. }

orderByDesc/orderByAsc

  1. orderByAsc(R... columns)
  2. orderByAsc(boolean condition, R... columns)
  • 排序:ORDER BY 字段, ... ASC
  • 例: orderByAsc("id", "name")--->order by id ASC,name ASC
  1. @Test
  2. public void selectWrapper03() {
  3. //姓名叫l某某,或者年龄小于23,按年龄降序,id升序
  4. QueryWrapper queryWrapper = new QueryWrapper();
  5. queryWrapper.likeRight("name", "l");
  6. queryWrapper.or();
  7. queryWrapper.lt("age", 23);
  8. queryWrapper.orderByDesc("age");
  9. queryWrapper.orderByAsc("id");
  10. List list = studentMapper.selectList(queryWrapper);
  11. list.forEach(System.out::println);
  12. }

Mybatis-plus<三> MybatisPlus条件构造器的更多相关文章

  1. MyBatis:MyBatis-Plus条件构造器EntityWrapper

    EntityWrapper 简介 1. MybatisPlus 通过 EntityWrapper(简称 EW,MybatisPlus 封装的一个查询条件构造器)或者 Condition(与 EW 类似 ...

  2. Mybatis-Plus - 条件构造器 QueryWrapper 的使用

    目录 前言 查询示例 基础代码 QueryWrapper 的基本使用 QueryWrapper 的lambada写法 LambadaQueryWrapper 的使用 LambdaQueryChainW ...

  3. 小书MybatisPlus第2篇-条件构造器的应用及总结

    一.条件构造器Wrapper Mybatis Plus为我们提供了如下的一些条件构造器,我们可以利用它们实现查询条件.删除条件.更新条件的构造. 条件构造器用于给如下的Mapper方法传参,通常情况下 ...

  4. MyBatisPlus性能分析插件,条件构造器,代码自动生成器详解

    性能分析插件 我们在平时的开发中,会遇到一些慢sql,测试,druid MP(MyBatisPlus)也提供性能分析插件,如果超过这个时间就停止 不过官方在3.2版本的时候取消了,原因如下 条件构造器 ...

  5. MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)

    CRUD 官方文档:https://baomidou.com/ (建议多看看官方文档,每种功能里面都有讲解)[本文章使用的mybatisplus版本为3.5.2] 条件构造器 一般都是用service ...

  6. Mybatis-Plus 实战完整学习笔记(九)------条件构造器核心用法大全(上)

    一.Mybatisplus通用(公共方法)CRUD,一共17种(3.0.3版),2.3系列也是这么多,这个新版本一定程度进行了改造和删减. 二.构造器UML图(3.0.3)-----实体包装器,主要用 ...

  7. MybatisPlus学习(四)条件构造器Wrapper方法详解

    文章目录 1.条件构造器 2.QueryWrapper 2.1.eq.ne 2.2.gt.ge.lt.le 2.3.between.notBetween 2.4.like.notLike.likeLe ...

  8. Mybatis-Plus 实战完整学习笔记(十一)------条件构造器删除,修改,conditon

    1.修改功能--其他过滤方式跟select一样 /** * 修改条件构造器 * @throws SQLException */ @Test public void selectUpdate() thr ...

  9. Mybatis-Plus 实战完整学习笔记(十)------条件构造器核心用法大全(下)

    31.升序orderByAsc 31.升序orderByAsc List<Employee> employeeList = employeeMapper.selectList(new Qu ...

随机推荐

  1. 添加xxx到右键菜单

    1. 添加notepad++到右键菜单[1] 添加到 右键菜单 将以下内容保存为 OpenWithNotepad++.reg 文件,双击运行即可(其中可执行文件路径和菜单项名称请自行替换): 注: 下 ...

  2. SpringBoot自动装配-Import

    1. 简介 @Import导入的类会被Spring加载到IOC容器中.而@Import提供4中用法: 导入Bean 导入配置类 导入 ImportSelector 实现类.一般用于加载配置文件中的类 ...

  3. solr(CVE-2019-17558)远程命令执行

    影响版本 Apache Solr 5.x到8.2.0版本 测试 https://github.com/jas502n/CVE-2019-0193

  4. kivy八种布局方式学习

    kivy八种布局:FloatLayout.BoxLayout.AnchorLayout.GridLayout.PageLayout.RelativeLayout.ScatterLayout.Stack ...

  5. Spring WebFlux 基础教程:WebSocket 使用

    WebSocket 协议简介 WebSocket 协议提供了一种标准化的方式,在客户端和服务端建立在一个TCP 连接之上的全双工,双向通信的协议. WebSocket 交互开始于 HTTP 请求,使用 ...

  6. CSS样式逐li添加,执行完,清空,反复执行

    function change_light(el) { el.hide() let i = 0; function temp() { if (i > el.length - 1) { el.hi ...

  7. C++ //继承同名静态成员处理方式

    1 //继承同名静态成员处理方式 2 #include <iostream> 3 #include <string> 4 using namespace std; 5 6 cl ...

  8. C++面向对象总结——虚指针与虚函数表

    最近在逛B站的时候发现有候捷老师的课程,如获至宝.因此,跟随他的讲解又复习了一遍关于C++的内容,收获也非常的大,对于某些模糊的概念及遗忘的内容又有了更深的认识. 以下内容是关于虚函数表.虚函数指针, ...

  9. myvimrc

    set nocompatible execute pathogen#infect() call pathogen#helptags() call pathogen#incubate() imap jk ...

  10. zlib开发笔记(三):zlib库介绍、在ubuntu上进行arm平台交叉编译

    前言   方便做嵌入式arm的交叉移植zlib库.   Zlib库   zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使 ...