MyBatis-Plus高级查询Wrapper
MyBatis-Plus高级查询Wrapper
- Wrapper查询构造器
- 查询条件
- QueryWrapper 查询条件封装类
- UpdateWrapper 更新条件封装类
- 查询实例
- 前期准备
- 查询操作
- allEq
- eq
- ne
- gt
- ge
- lt
- le
- between
- notBetween
- like
- notLike
- likeLeft
- likeRight
- isNull
- isNotNull
- in
- notIn
- inSql
- notInSql
- groupBy
- orderByAsc
- orderByDesc
- orderBy
- or
- and
- last
- exists
- notExists
- 分页查询
Wrapper查询构造器
查询条件
条件 | 说明 |
---|---|
allEq | 基于 map 的比较 |
eq | 等于 = |
ne | 不等于 <> |
gt | 大于 > |
ge | 大于等于 >= |
lt | 小于 < |
le | 小于等于 < |
between | BETWEEN 值1 AND 值2 |
notBetween | NOT BETWEEN 值1 AND 值2 |
like | LIKE ‘%值%’ |
notLike | NOT LIKE ‘%值%’ |
likeLeft | LIKE ‘%值’ |
likeRight | LIKE ‘值%’ |
isNull | 字段 IS NULL |
isNotNull | 字段 IS NOT NULL |
in | 字段 IN (value1, value2, …) |
notIn | 字段 NOT IN (value1, value2, …) |
inSql |
字段 IN (sql 语句) inSql(“age”, “1,2,3”) -> age in (1,2,3) inSql(“id”, “select id from student where id < 3”) -> id in (select id from student where id < 3) |
notInSql | 字段 NOT IN (sql 语句) |
groupBy | GROUP BY 字段 |
orderByAsc | 升序 ORDER BY 字段, … ASC |
orderByDesc | 降序 ORDER BY 字段, … DESC |
orderBy |
自定义字段排序 orderBy(true, true, “id”, “name”) -> order by id ASC, name ASC |
having | 条件分组 |
or | OR 语句,拼接 + OR 字段=值 |
and | AND 语句,拼接 + AND 字段=值 |
apply | 拼接 sql |
last | 在 sql 语句后拼接自定义条件 |
exists |
拼接 EXISTS(sql语句) exists(“selece id from student where age = 1”) -> exists(selece id from student where age = 1) |
notExists | 拼接 NOT EXISTS(sql语句) |
nested | 正常嵌套 不带 AND 或者 OR |
QueryWrapper 查询条件封装类
方法 | 说明 |
---|---|
select | 设置查询字段 select 后面的内容 |
UpdateWrapper 更新条件封装类
方法 | 说明 |
---|---|
set | 设置要更新的字段,MP 拼接 SQL 语句 |
setSql | 参数是 sql 语句,MP 不再处理语句 |
查询实例
前期准备
创建一个数据库
mybatisplus
创建
user
表CREATE TABLE `user` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(30) DEFAULT NULL,`age` int(11) DEFAULT NULL,`email` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`) );
创建
springboot
工程导入对应
maven
坐标<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.cmy</groupId><artifactId>mybatis_plus</artifactId><version>0.0.1-SNAPSHOT</version><name>mybatis_plus</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
mysql
数据库相关配置spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1/mybatisplus?useUnicode=true&characterEncoding=utf-8username: rootpassword: root
mybatis-plus
日志信息配置mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
创建实体类
User
package com.cmy.mybatis_plus.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId;/*** 实体类 user*/ public class User {/*** 指定主键id生成的方式* value 是主键字段的名称,如果是id,可以不用写* type 指定主键的类型,主键的值如何生成。idType.AUTO 自动增长*/@TableId(value = "id",type = IdType.AUTO)private Long id;private String name;private String email;private Integer age;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", email='" + email + '\'' +", age=" + age +'}';} }
自定义
User
的Mapper
接口package com.cmy.mybatis_plus.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.cmy.mybatis_plus.entity.User;/*** 自定义 Mapper 接口,就是 dao 接口* 1. 实现BaseMapper* 2. 指定实体类(泛型)** BaseMapper 是 MP 框架中的对象,定义了 17 个操作方法(CRUD)*/ public interface UserMapper extends BaseMapper<User> {}
用于
CRUD
查询操作
allEq
条件用 Map 进行封装
“name” -> “zhangsan”
“age” -> 21
@Autowired
private UserMapper userMapper;@Test
public void testAllEq() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 封装条件Map<String, Object> hashMap = new HashMap<>();hashMap.put("name", "zhangsan");hashMap.put("age", 21);queryWrapper.allEq(hashMap);// 调用 MP 自己的方法// SELECT id,name,email,age FROM user WHERE (name = ? AND age = ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> {System.out.println(user);});
}
allEq(Map<R, V> params, boolean null2IsNull)
有两个参数,第二个参数默认为 true
,表示查询的条件的值可以为 null
。例如age IS NULL
eq
eq("列名", 值)
@Autowired
private UserMapper userMapper;@Test
public void testEq() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", "zhangsan");// SELECT id,name,email,age FROM user WHERE (name = ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
ne
ne("列名", 值)
@Autowired
private UserMapper userMapper;@Test
public void testNe() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.ne("name", "zhangsan");// SELECT id,name,email,age FROM user WHERE (name <> ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
gt
gt("age", 20)
-> age > 20
@Autowired
private UserMapper userMapper;@Test
public void testGt() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt("age", 20);// SELECT id,name,email,age FROM user WHERE (age > ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
ge
ge("age", 21)
-> age >= 21
@Autowired
private UserMapper userMapper;@Test
public void testGe() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.ge("age", 21);// SELECT id,name,email,age FROM user WHERE (age >= ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
lt
lt("age", 21)
-> age < 21
@Autowired
private UserMapper userMapper;@Test
public void testLt() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.lt("age", 21);// SELECT id,name,email,age FROM user WHERE (age < ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
le
le("age", 21)
-> age <= 21
@Autowired
private UserMapper userMapper;@Test
public void testLe() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.le("age", 21);// SELECT id,name,email,age FROM user WHERE (age <= ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
between
between("age", 18, 25)
-> age BETWEEN 18 AND 25
@Autowired
private UserMapper userMapper;@Test
public void testBetween() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.between("age", 18, 25);// SELECT id,name,email,age FROM user WHERE (age BETWEEN ? AND ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
notBetween
notBetween("age", 18, 25)
-> age NOT BETWEEN 18 AND 25
@Autowired
private UserMapper userMapper;@Test
public void testNotBetween() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.notBetween("age", 18, 25);// SELECT id,name,email,age FROM user WHERE (age NOT BETWEEN ? AND ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
like
like 匹配值 -> "%值%"
@Autowired
private UserMapper userMapper;@Test
public void testLike() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", "李");// SELECT id,name,email,age FROM user WHERE (name LIKE ?) %李%(String)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
notLike
@Autowired
private UserMapper userMapper;@Test
public void testNotLike() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.notLike("name", "李");// SELECT id,name,email,age FROM user WHERE (name NOT LIKE ?) %李%(String)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
likeLeft
likeLeft 匹配值 -> "%值"
@Autowired
private UserMapper userMapper;@Test
public void testLikeLeft() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeLeft("name", "四");// SELECT id,name,email,age FROM user WHERE (name LIKE ?) %四(String)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
likeRight
likeRight 匹配值 -> "值%"
@Autowired
private UserMapper userMapper;@Test
public void testLikeRight() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeRight("name", "李");// SELECT id,name,email,age FROM user WHERE (name LIKE ?) 李%(String)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
isNull
@Autowired
private UserMapper userMapper;@Test
public void testIsNull() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNull("name");// SELECT id,name,email,age FROM user WHERE (name IS NULL)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
isNotNull
@Autowired
private UserMapper userMapper;@Test
public void testIsNotNull() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNotNull("name");// SELECT id,name,email,age FROM user WHERE (name IS NOT NULL)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
in
in("name", "张三", "李四")
-> name in ("张三", "李四")
@Autowired
private UserMapper userMapper;@Test
public void testIn() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.in("name", "zs", "zhangsan");// SELECT id,name,email,age FROM user WHERE (name IN (?,?))List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
notIn
notIn("name", "张三", "李四")
-> name not in ("张三", "李四")
@Autowired
private UserMapper userMapper;@Test
public void testNotIn() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.notIn("name", "zs", "zhangsan");// SELECT id,name,email,age FROM user WHERE (name NOT IN (?,?))List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
inSql
@Autowired
private UserMapper userMapper;@Test
public void testInSql() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.inSql("age", "select age from user where id = 10");// SELECT id,name,email,age FROM user WHERE (age IN (select age from user where id = 10))List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
notInSql
@Autowired
private UserMapper userMapper;@Test
public void testNotInSql() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.notInSql("age", "select age from user where id = 10");// SELECT id,name,email,age FROM user WHERE (age NOT IN (select age from user where id = 10))List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
groupBy
groupBy 多个字段
@Autowired
private UserMapper userMapper;@Test
public void testGroupBy() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("name, count(*) personNumbers");queryWrapper.groupBy("name");// SELECT id,name,email,age FROM user WHERE (age NOT IN (select age from user where id = 10))List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
orderByAsc
@Autowired
private UserMapper userMapper;@Test
public void testOrderByAsc() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderByAsc("name", "age");// SELECT id,name,email,age FROM user ORDER BY name ASC,age ASCList<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
orderByDesc
@Autowired
private UserMapper userMapper;@Test
public void testOrderByDesc() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("name", "age");// SELECT id,name,email,age FROM user ORDER BY name DESC,age DESCList<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
orderBy
@Autowired
private UserMapper userMapper;@Test
public void testOrderBy() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderBy(true, true, "name").orderBy(true, false, "age");// SELECT id,name,email,age FROM user ORDER BY name ASC,age DESCList<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
or
@Autowired
private UserMapper userMapper;@Test
public void testOr() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", "zs").or().eq("age", 21);// SELECT id,name,email,age FROM user WHERE (name = ? OR age = ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
and
@Autowired
private UserMapper userMapper;@Test
public void testAnd() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", "zs").eq("age", 21);// SELECT id,name,email,age FROM user WHERE (name = ? AND age = ?)List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
last
@Autowired
private UserMapper userMapper;@Test
public void testLast() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", "zs").or().eq("age", 21).last("limit 1");// SELECT id,name,email,age FROM user WHERE (name = ? OR age = ?) limit 1List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
exists
@Autowired
private UserMapper userMapper;@Test
public void testExists() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.exists("select name from user where age > 21");// SELECT id,name,email,age FROM user WHERE (EXISTS (select name from user where id = 1))List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
notExists
@Autowired
private UserMapper userMapper;@Test
public void testNotExists() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.notExists("select name from user where age > 21");// SELECT id,name,email,age FROM user WHERE (NOT EXISTS (select name from user where id = 1))List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(user -> System.out.println(user));
}
分页查询
创建一个
config
类,定义方法,将分页拦截器注入到spring
容器中package com.cmy.mybatis_plus.config;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** @Configuration 配置文件*/ @Configuration public class Config {/*** 定义方法,方法返回值是java 对象,放入到 spring 容器中*/@Beanpublic PaginationInnerInterceptor paginationInnerInterceptor() {return new PaginationInnerInterceptor();} }
编写测试代码
@Autowired private UserMapper userMapper;@Test public void testPage() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();IPage<User> page = new Page<>();// 设置分页参数page.setCurrent(1); // 第一页page.setSize(3); // 每页的记录数IPage<User> result = userMapper.selectPage(page, queryWrapper);// 获取分页后的记录List<User> userList = result.getRecords();System.out.println("userList.size() = " + userList.size());// 分页的信息System.out.println("页数:" + result.getPages());System.out.println("总记录数:" + result.getTotal());System.out.println("当前页" + result.getCurrent());System.out.println("每页多少条记录:" + result.getSize()); }
MyBatis-Plus高级查询Wrapper相关推荐
- Mybatis的高级查询(包含一对一,一对多,多对多,resultMap的继承,分页插件pagehelper知识点)详细
项目目录: 所有知识点和提示说明的地方我都写在代码中了,不懂的地方可以私聊我 User实体类: package com.ljh.pojo;import java.util.Date;public cl ...
- order by 子查询_【框架】118:mybatis之多表高级查询
今天是刘小爱自学Java的第118天. 感谢你的观看,谢谢你. 学习内容安排如下: 补充说明知识点:resultMap,sql片段. mybatis中的高级查询,即多表关联查询. 查询主要分为:一对一 ...
- 2.4.3 Mybatis 高级查询, 复杂映射, 返回主键, 动态SQL if, set, foreach, 核心配置文件深入,plugins标签, 多表查询, 嵌套查询
目录 Mybatis 复杂映射&配置文件深入 一 Mybatis高级查询 1.1 ResutlMap属性 1.2 多条件查询(三种) 1.3 模糊查询 二 Mybatis映射文件深入 2.1 ...
- java回顾:MyBatis参数、sql片段、动态sql、高级查询
目录 一.MyBatis参数 SqlSessiong工具类 1.映射文件配置-入参 1.1 parameterType入参 1.2 单个入参,变量名任意定义: 1.3 多个入参,解决方案: 1.4 p ...
- Myabtis-Plus(高级查询)
Myabtis-Plus(高级查询) 一.列投影(select): 只想看到查询到的数据中部分字段数据. 例: 查询所有学生信息,返回name age 列.QueryWrapper<USer ...
- 实现后台高级查询(中级版)
初级版本的高级查询实现是没有问题的.然而,存在着一些你不尽人意的地方 问题1:拼接SQL依然麻烦,不爽! 问题2:使用了where1=1,降低性能 问题3:从责任分离上考虑,DAO是不应该做SQL拼接 ...
- 实现后台高级查询(基础版)
1 高级查询基础版 操作步骤:1.建立高级查询表对象:XxxQuery/XxxQueryObject.(Xxx表示对象名称):ProductQueryObject(商品的高级查询对象),封装了商品高级 ...
- 【javaWeb微服务架构项目——乐优商城day07】——Elasticsearch介绍和安装及使用(安装kibana,安装ik分词器,Spring Data Elasticsearch,高级查询)
文章目录 0.学习目标 1.Elasticsearch介绍和安装 1.1.简介 1.1.1.Elastic 1.1.2.Elasticsearch 1.1.3.版本 1.2.安装和配置 1.2.1.新 ...
- spring boot集成mybatis-plus——Mybatis Plus 分页查询数据(图解)
Mybatis Plus 分页查询数据(图解) 更新时间 2023-01-01 11:58:32 大家好,我是小哈. 本小节中,我们将学习如何通过 Mybatis Plus 分页查询数据库表中的数据 ...
最新文章
- NLP(Natural Language Processing)
- Linux6.x修改出eth0网卡的解决方法
- WCF服务的REST / SOAP端点
- hdu oj1092题解
- java blockingqueue_Java多线程进阶(三一)—— J.U.C之collections框架:BlockingQueue接口...
- PAT甲级 -- 1050 String Subtraction (20 分)
- 前端学习(1531):钩子函数--代码演示(面试重点)二
- 多校一道KMP+DP的题
- Spring Boot提交表单信息
- IE浏览器--internet选项--连接中的设置是灰色
- python+Eclipse+pydev环境搭建
- [zt]扫盲,什么叫MAD(a11s)
- 重拾C++之虚函数和虚基类以及抽象类
- 微信商户号进件接口,错误之 重新确认最终受益人字段
- 高等数学-考试常用的三角函数公式
- 云计算学习路线教程大纲课件:部署论坛系统Discuz
- 美女--男人的Vitamin C
- java爬取论坛信息_Java爬取校内论坛新帖
- NEC加入美国国土安全局AIS网络威胁信息官民共享体系
- woo如何监听目录和文件变动,woo目录中的文件被改变,监听文件被修改权限
热门文章
- 解决云锁+SSL 图片加载不上出来【提示net:ERR_CONNECTION_CLOSED 200】的情况
- xp系统打开计算机配置文件,xp电脑重启后所有设置都还原了。
- 为什么智能家居总是被说没卵用?
- 新型肺炎下的互联网“新拐点”
- A-Level化学例题解析及练习
- python程序中出现OSError:[WinError 10049] 在其上下文中,该请求的地址无效的解决方法
- Spring Boot整合Security系列步骤及问题排查(十一)—— 集成QQ登录
- 全国计算机等级考试二级 C 语言程序设计考试大纲
- C/C++代码获取今天凌晨零点零时零分的时间戳
- MUV LUV EXTRA 2019CCPC秦皇岛站J