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. NLP(Natural Language Processing)
  2. Linux6.x修改出eth0网卡的解决方法
  3. WCF服务的REST / SOAP端点
  4. hdu oj1092题解
  5. java blockingqueue_Java多线程进阶(三一)—— J.U.C之collections框架:BlockingQueue接口...
  6. PAT甲级 -- 1050 String Subtraction (20 分)
  7. 前端学习(1531):钩子函数--代码演示(面试重点)二
  8. 多校一道KMP+DP的题
  9. Spring Boot提交表单信息
  10. IE浏览器--internet选项--连接中的设置是灰色
  11. python+Eclipse+pydev环境搭建
  12. [zt]扫盲,什么叫MAD(a11s)
  13. 重拾C++之虚函数和虚基类以及抽象类
  14. 微信商户号进件接口,错误之 重新确认最终受益人字段
  15. 高等数学-考试常用的三角函数公式
  16. 云计算学习路线教程大纲课件:部署论坛系统Discuz
  17. 美女--男人的Vitamin C
  18. java爬取论坛信息_Java爬取校内论坛新帖
  19. NEC加入美国国土安全局AIS网络威胁信息官民共享体系
  20. woo如何监听目录和文件变动,woo目录中的文件被改变,监听文件被修改权限

热门文章

  1. 解决云锁+SSL 图片加载不上出来【提示net:ERR_CONNECTION_CLOSED 200】的情况
  2. xp系统打开计算机配置文件,xp电脑重启后所有设置都还原了。
  3. 为什么智能家居总是被说没卵用?
  4. 新型肺炎下的互联网“新拐点”
  5. A-Level化学例题解析及练习
  6. python程序中出现OSError:[WinError 10049] 在其上下文中,该请求的地址无效的解决方法
  7. Spring Boot整合Security系列步骤及问题排查(十一)—— 集成QQ登录
  8. 全国计算机等级考试二级 C 语言程序设计考试大纲
  9. C/C++代码获取今天凌晨零点零时零分的时间戳
  10. MUV LUV EXTRA 2019CCPC秦皇岛站J