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 ...
随机推荐
- Orchestrator+Proxysql 实现自动导换+应用透明读写分离
前面一篇博客我介绍了如何通过Orachestrator+脚本实现自动导换. 这一章,我来演示一下如何通过Orchestrator+Proxysql 实现自动导换+应用透明读写分离 总体架构 可选架构1 ...
- jvm源码解读--14 defNewGeneration.cpp gc标记复制之后,进行空间清理
进入Eden()->clean()函数 void EdenSpace::clear(bool mangle_space) { ContiguousSpace::clear(mangle_spac ...
- 手撸一个SpringBoot-Starter
1. 简介 通过了解SpringBoot的原理后,我们可以手撸一个spring-boot-starter来加深理解. 1.1 什么是starter spring官网解释 starters是一组方便的依 ...
- GoogleTest死亡测试的跨平台BUG
最近工作用到了GoogleTest来作单元测试,但是死亡测试的ASSERT_DEATH语句一直跑不通. GoogleTest会启动子进程来运行代码,并捕捉子进程的错误消息,这就是所谓的"死亡 ...
- 【java基础】枚举
目录 枚举的定义 枚举的使用 原理 枚举的扩展 单例模式 避免反射攻击 反序列化 策略模式 总结 枚举的定义 public enum Color { Red,Blue,Green; } 枚举的使用 C ...
- 服务网格Istio入门-详细记录Kubernetes安装Istio并使用
我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~ 1 服务网格Istio Istio是开源的Service Mesh实现,一般用于Kubernetes ...
- C++ 2(将类分文件) //点和圆的关系 //设计一个圆形类 和一个点类 计算点和圆的关系 //点到圆心的距离 == 半径 点在圆上 //点到圆心的距离 > 半径 点在圆外 //点到圆心的距离 < 半径 点在圆内 //点到圆心的距离 获取 ....... (x1 -x2)^2 + (y1-y2)^2 开根号 和半径对比 // 计算 可以 两边同时 平方
1 源文件 main.cpp 2 //点和圆的关系 3 //设计一个圆形类 和一个点类 计算点和圆的关系 4 //点到圆心的距离 == 半径 点在圆上 5 //点到圆心的距离 > 半径 点在圆外 ...
- 用kivy学习制作简易调色画板app
制作一款简易的调色画板,要用到的知识:页面布局.ToggleButton.ToggleButtonBehavior.get_color_from_hex(兼容十六进制编码颜色):功能上要可以选择颜色, ...
- SpringBoot开发五-社区首页开发
需求介绍-社区首页 根据之前的学习,我们一般都是先按照DAO->Service->Controller这个顺序去开发 分布实现: 开发社区首页,显示前十个帖子. 开发分页组件,分页显示所有 ...
- 浅析Java断言
Java断言 1.断言的概念 Java的断言机制assert是一种用于测试阶段的语法特性,它允许我们在测试期间向代码中插入一些检查语句.代码发布时这些检测语句将被自动移除. 断言关键字assert有下 ...