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 +'}';}
      }
    • 自定义 UserMapper 接口

      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相关推荐

  1. Mybatis的高级查询(包含一对一,一对多,多对多,resultMap的继承,分页插件pagehelper知识点)详细

    项目目录: 所有知识点和提示说明的地方我都写在代码中了,不懂的地方可以私聊我 User实体类: package com.ljh.pojo;import java.util.Date;public cl ...

  2. order by 子查询_【框架】118:mybatis之多表高级查询

    今天是刘小爱自学Java的第118天. 感谢你的观看,谢谢你. 学习内容安排如下: 补充说明知识点:resultMap,sql片段. mybatis中的高级查询,即多表关联查询. 查询主要分为:一对一 ...

  3. 2.4.3 Mybatis 高级查询, 复杂映射, 返回主键, 动态SQL if, set, foreach, 核心配置文件深入,plugins标签, 多表查询, 嵌套查询

    目录 Mybatis 复杂映射&配置文件深入 一 Mybatis高级查询 1.1 ResutlMap属性 1.2 多条件查询(三种) 1.3 模糊查询 二 Mybatis映射文件深入 2.1 ...

  4. java回顾:MyBatis参数、sql片段、动态sql、高级查询

    目录 一.MyBatis参数 SqlSessiong工具类 1.映射文件配置-入参 1.1 parameterType入参 1.2 单个入参,变量名任意定义: 1.3 多个入参,解决方案: 1.4 p ...

  5. Myabtis-Plus(高级查询)

    Myabtis-Plus(高级查询) 一.列投影(select): ​ 只想看到查询到的数据中部分字段数据. 例: 查询所有学生信息,返回name age 列.QueryWrapper<USer ...

  6. 实现后台高级查询(中级版)

    初级版本的高级查询实现是没有问题的.然而,存在着一些你不尽人意的地方 问题1:拼接SQL依然麻烦,不爽! 问题2:使用了where1=1,降低性能 问题3:从责任分离上考虑,DAO是不应该做SQL拼接 ...

  7. 实现后台高级查询(基础版)

    1 高级查询基础版 操作步骤:1.建立高级查询表对象:XxxQuery/XxxQueryObject.(Xxx表示对象名称):ProductQueryObject(商品的高级查询对象),封装了商品高级 ...

  8. 【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.新 ...

  9. spring boot集成mybatis-plus——Mybatis Plus 分页查询数据(图解)

    Mybatis Plus 分页查询数据(图解)  更新时间 2023-01-01 11:58:32 大家好,我是小哈. 本小节中,我们将学习如何通过 Mybatis Plus 分页查询数据库表中的数据 ...

最新文章

  1. P3项目全球模板狗血设置之一 --- 发货到成本中心需要输入Customer
  2. 承接iPhone,iPad开发外包(长期承接IPhone,IPad项目外包)
  3. 机器人纹身师出世,你敢让它帮你纹身吗?
  4. 好久不见webmin
  5. python 可视化大屏幕_如何用python搭建可视化看板?
  6. [myeclipse] 官方中文网站
  7. opencv+Dlib python瘦脸代码
  8. E - 确定比赛名次(拓补排序)
  9. 十进制经纬度格式转换度分格式
  10. 【机器人学习】机器人轨迹规划A※算法代码
  11. 年轻人能为世界做什么
  12. 虎牙直播怎么换html5,虎牙直播助手怎么改名字 昵称更换方法
  13. react开发公众号踩坑日志
  14. 拼多多——多多的字符变换
  15. 快速设置Revit模型材质(Dynamo和API)
  16. Oracle 11G 11.2.0.4 RAC部署参考指南
  17. 12.嵌入式控制器EC实战 SMBus概述
  18. 爱思助手更新后无法连接服务器,《爱思助手》操作失败解决办法(图文)
  19. Android App 保活之 ADJ 算法
  20. GaussDB表设计最佳实践

热门文章

  1. 不同星座的研发人员的特点
  2. 科技也公益:404页面,我们可以更多创意
  3. 一篇文章带你了解JavaScript中的面向 “对象”
  4. 10分钟阅读一篇关于Vue-cli3和Element-UI的文章
  5. Python requests.get() 获取到的数据是乱码(一、合同编号:豫财磋商采è)
  6. mysql复合主键优缺点_MySQL中的复合主键性能缺陷
  7. 水培蔬菜的成本高与普通蔬菜-但优势却是不少
  8. 山顶之光摩天轮制作教程
  9. 框架楼是什么意思_框架结构是什么意思
  10. robotframework ride不能正常启动