Mybatis-plus<三> MybatisPlus条件构造器
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
allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
全部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 = '老王'
@Test
public void testAllEq() {
Map<String, Object> params = new HashMap<>();
params.put("sex", "f");
params.put("age", "19");
params.put("address", null);
QueryWrapper<Student> wrapper = new QueryWrapper<>();
//1,2,3,4仅保留一项,其余注释掉
//1.全部匹配params条件
wrapper.allEq(params);
//2.全部匹配params条件(为null的不作为条件)
wrapper.allEq(params, false);
//3.只有params中k.equals("sex")或者k.equals("id")才作为条件
wrapper.allEq((k, v) -> (k.equals("sex") || k.equals("id")), params);
//4.只有params中k.equals("sex")或者k.equals("id")或者k.equals("name")才作为条件
wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id") || k.equals("name")), params);
List<Student> students = this.studentMapper.selectList(wrapper);
for (Student student : students) {
System.out.println(student);
}
}
eq
eq(R column, Object val)
eq(boolean condition, R column, Object val)
等于 =
例:
eq("name", "老王")
--->`name = '老王'@Test
public void testEq() {
//department==english && age==16 sex==f
QueryWrapper<Student> wrapper = new QueryWrapper<>();
wrapper.eq("department", "english")
.ge("age", "16")
.in("sex", "f");
like/notlike
like(R column, Object val)
like(boolean condition, R column, Object val)
- LIKE '%值%'
- 例:
like("name", "王")
--->name like '%王%'
@Test
public void testLike() {
QueryWrapper<Student> wrapper = new QueryWrapper<>();
//姓名叫l某某
wrapper.likeRight("name", "l");
List<Student> students = this.studentMapper.selectList(wrapper);
for (Student student : students) {
System.out.println(student);
}
}
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 |
@Test
public void selectWrapper04() {
//姓名叫l某某,并且(年龄小于24或者地址不为空)
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.likeRight("name", "l");
queryWrapper.and(qw -> qw.lt("age", 24).or().isNotNull("address"));
List list = studentMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
@Test
public void selectWrapper05() {
//年龄等于21,22,28
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.in("age", Arrays.asList(21, 22, 28));
List<Student> users = studentMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
/**
* 筛选年龄=21, 22, 28的人,返回一条数据
*/
@Test
public void selectWrapper08() {
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.in("age", Arrays.asList(21, 26, 28)).last("limit 1");
List<Student> users = studentMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
or
@Test
public void testOr() {
//姓名叫zhujiao,或者年龄等于21
QueryWrapper<Student> wrapper = new QueryWrapper<>();
wrapper.eq("name", "zhujiao").or().eq("age", 21);
List<Student> students = this.studentMapper.selectList(wrapper);
for (Student student : students) {
System.out.println(student);
}
}
orderByDesc/orderByAsc
orderByAsc(R... columns)
orderByAsc(boolean condition, R... columns)
- 排序:ORDER BY 字段, ... ASC
- 例:
orderByAsc("id", "name")
--->order by id ASC,name ASC
@Test
public void selectWrapper03() {
//姓名叫l某某,或者年龄小于23,按年龄降序,id升序
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.likeRight("name", "l");
queryWrapper.or();
queryWrapper.lt("age", 23);
queryWrapper.orderByDesc("age");
queryWrapper.orderByAsc("id");
List list = studentMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
Mybatis-plus<三> MybatisPlus条件构造器的更多相关文章
- MyBatis:MyBatis-Plus条件构造器EntityWrapper
EntityWrapper 简介 1. MybatisPlus 通过 EntityWrapper(简称 EW,MybatisPlus 封装的一个查询条件构造器)或者 Condition(与 EW 类似 ...
- Mybatis-Plus - 条件构造器 QueryWrapper 的使用
目录 前言 查询示例 基础代码 QueryWrapper 的基本使用 QueryWrapper 的lambada写法 LambadaQueryWrapper 的使用 LambdaQueryChainW ...
- 小书MybatisPlus第2篇-条件构造器的应用及总结
一.条件构造器Wrapper Mybatis Plus为我们提供了如下的一些条件构造器,我们可以利用它们实现查询条件.删除条件.更新条件的构造. 条件构造器用于给如下的Mapper方法传参,通常情况下 ...
- MyBatisPlus性能分析插件,条件构造器,代码自动生成器详解
性能分析插件 我们在平时的开发中,会遇到一些慢sql,测试,druid MP(MyBatisPlus)也提供性能分析插件,如果超过这个时间就停止 不过官方在3.2版本的时候取消了,原因如下 条件构造器 ...
- MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)
CRUD 官方文档:https://baomidou.com/ (建议多看看官方文档,每种功能里面都有讲解)[本文章使用的mybatisplus版本为3.5.2] 条件构造器 一般都是用service ...
- Mybatis-Plus 实战完整学习笔记(九)------条件构造器核心用法大全(上)
一.Mybatisplus通用(公共方法)CRUD,一共17种(3.0.3版),2.3系列也是这么多,这个新版本一定程度进行了改造和删减. 二.构造器UML图(3.0.3)-----实体包装器,主要用 ...
- MybatisPlus学习(四)条件构造器Wrapper方法详解
文章目录 1.条件构造器 2.QueryWrapper 2.1.eq.ne 2.2.gt.ge.lt.le 2.3.between.notBetween 2.4.like.notLike.likeLe ...
- Mybatis-Plus 实战完整学习笔记(十一)------条件构造器删除,修改,conditon
1.修改功能--其他过滤方式跟select一样 /** * 修改条件构造器 * @throws SQLException */ @Test public void selectUpdate() thr ...
- Mybatis-Plus 实战完整学习笔记(十)------条件构造器核心用法大全(下)
31.升序orderByAsc 31.升序orderByAsc List<Employee> employeeList = employeeMapper.selectList(new Qu ...
随机推荐
- css--实现一个文字少时居中,文字换行时居左的样式
前言 最近群里的小伙伴去面试,遇到这样一个问题,面试官问:"用 css 对一行文字进行布局,当文字不够换行的时候,这行文字要居中显示,当文字出现换行的时候,这行文字要靠左显示.", ...
- Python 爬取 ajax 返回的数据
1 from urllib.request import quote, unquote 2 import random 3 import requests 4 5 #quote 将单个字符串编码转化为 ...
- Spring Cloud 专题之六:bus
书接上回: SpringCloud专题之一:Eureka Spring Cloud专题之二:OpenFeign Spring Cloud专题之三:Hystrix Spring Cloud 专题之四:Z ...
- python中两种拷贝目录方法的比较
首先是用python自己的api: shutil.copytree('./build/tested/doc', './build/tested/build/doc') 优点是改变平台时不需要修改代码, ...
- 关于协议栈XDATA,内存溢出的小结
[第二部分的内容仅供参考,自己不是十分确定] ************************************************************** ************** ...
- Haskell Interactive Development in Emacs
Installation Following haskell-mode. Use MELPA repository: add the following into ~/.emacs (require ...
- Apache虚拟web主机构建
目录 一.构建虚拟web主机 1.1.虚拟web主机概述 二.搭建虚拟web主机步骤 2.1.基于域名搭建虚拟主机 ①为虚拟主机提供域名解析 ②为虚拟主机准备网页文档 ③添加虚拟主机配置 ④设置访问路 ...
- 【笔记】初探KNN算法(1)
KNN算法(1) 全称是K Nearest Neighbors k近邻算法: 思想简单 需要的数学知识很少 效果不错 可以解释机器学习算法使用过程中的很多细节问题 更加完整的刻画机器学习应用的流程 其 ...
- 安鸾CTF-cookies注入
什么是cookie注入? cookie注入的原理是:修改cookie的值进行注入 cookie注入其原理也和平时的注入一样,只不过注入参数换成了cookie 例如:PHP $_REQUEST 变量变量 ...
- Sqli-Labs less17-19
less-17 前置基础知识: UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为XML文 ...