三,MyBatis-Plus 的各种查询的“超详细阐明”,比如(等值查询,范围查询, ...

伤心客  金牌会员 | 2024-9-26 17:39:20 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 885|帖子 885|积分 2655

三,MyBatis-Plus 的各种查询的“超详细阐明”,比如(等值查询,范围查询,模糊查询...)

@
目录

1. 条件构造器介绍

在实际开发需求中条件查询黑白常普遍的,接下来我们就来讲解如何使用 MyBatis Plus 完成条件查询。
首先,想要使用 MyBatis Plus 完成条件查询,基于面向对象的头脑,万物皆对象 ,那么查询条件,也需要使用对象来完成封装。我们可以先看看,在 MyBatis Plus 中和条件有关的类有哪些,他们之间有什么关系,理清晰了这个,我们在传递条件对象的时候,就很清晰了。
Wrapper  抽象类,条件类的顶层,提供了一些获取和判断相干的方法。

AbstractWrapper  抽象类,Wrapper 的子类,提供了所有的条件相干方法。

AbstractLambdaWrapper 抽象类,AbstractWrapper 的子类,确定字段参数为方法引用范例。

QueryWrapper 类,AbstractWrapper 的子类,如果我们需要传递 String 范例的字段信息,创建该对象。

LambdaQueryWrapper  类,AbstractLambdaWrapper 的子类,如果我们需要传递方法引用方式的字段信息,创建该对象。

该图为以上各类的关系,我们在编写代码的时候,只需要关注 QueryWrapper 和LambdaQueryWrapper


2. 准备工作:

引入相干的jar 依靠。在 pom.xml 文件当中;
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.     <parent>
  6.         <groupId>org.springframework.boot</groupId>
  7.         <artifactId>spring-boot-starter-parent</artifactId>
  8.         <version>2.5.3</version>
  9.         <relativePath/>
  10.     </parent>
  11.     <groupId>com.rainbowsea</groupId>
  12.     <artifactId>mp03</artifactId>
  13.     <version>0.0.1-SNAPSHOT</version>
  14.     <name>mp03</name>
  15.     <description>mp03</description>
  16.     <url/>
  17.     <licenses>
  18.         <license/>
  19.     </licenses>
  20.     <developers>
  21.         <developer/>
  22.     </developers>
  23.     <scm>
  24.         <connection/>
  25.         <developerConnection/>
  26.         <tag/>
  27.         <url/>
  28.     </scm>
  29.     <properties>
  30.         <java.version>8</java.version>
  31.     </properties>
  32.     <dependencies>
  33.         <dependency>
  34.             <groupId>org.springframework.boot</groupId>
  35.             <artifactId>spring-boot-starter</artifactId>
  36.         </dependency>
  37.         <dependency>
  38.             <groupId>org.springframework.boot</groupId>
  39.             <artifactId>spring-boot-starter-test</artifactId>
  40.             <scope>test</scope>
  41.         </dependency>
  42.         
  43.         <dependency>
  44.             <groupId>org.springframework.boot</groupId>
  45.             <artifactId>spring-boot-starter-web</artifactId>
  46.         </dependency>
  47.         
  48.         <dependency>
  49.             <groupId>mysql</groupId>
  50.             <artifactId>mysql-connector-java</artifactId>
  51.         </dependency>
  52.         
  53.         <dependency>
  54.             <groupId>org.projectlombok</groupId>
  55.             <artifactId>lombok</artifactId>
  56.         </dependency>
  57.         
  58.         <dependency>
  59.             <groupId>com.alibaba</groupId>
  60.             <artifactId>druid</artifactId>
  61.             <version>1.2.8</version>
  62.         </dependency>
  63.         
  64.         <dependency>
  65.             <groupId>com.baomidou</groupId>
  66.             <artifactId>mybatis-plus-boot-starter</artifactId>
  67.             <version>3.4.3</version>
  68.         </dependency>
  69.     </dependencies>
  70.     <build>
  71.         <plugins>
  72.             <plugin>
  73.                 <groupId>org.springframework.boot</groupId>
  74.                 <artifactId>spring-boot-maven-plugin</artifactId>
  75.             </plugin>
  76.         </plugins>
  77.     </build>
  78.     <repositories>
  79.         <repository>
  80.             <id>spring-snapshots</id>
  81.             <name>Spring Snapshots</name>
  82.             <url>https://repo.spring.io/snapshot</url>
  83.             <releases>
  84.                 <enabled>false</enabled>
  85.             </releases>
  86.         </repository>
  87.     </repositories>
  88.     <pluginRepositories>
  89.         <pluginRepository>
  90.             <id>spring-snapshots</id>
  91.             <name>Spring Snapshots</name>
  92.             <url>https://repo.spring.io/snapshot</url>
  93.             <releases>
  94.                 <enabled>false</enabled>
  95.             </releases>
  96.         </pluginRepository>
  97.     </pluginRepositories>
  98. </project>
复制代码
编写项目的场景启动器:
  1. package com.rainbowsea;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class Mp03Application {
  6.     public static void main(String[] args) {
  7.         SpringApplication.run(Mp03Application.class, args);
  8.     }
  9. }
复制代码
创建的数据库表和布局。如下:

编写对应 数据表的 Java Bean 类对象。
  1. package com.rainbowsea.bean;
  2. import com.baomidou.mybatisplus.annotation.TableField;
  3. import com.baomidou.mybatisplus.annotation.TableName;
  4. import lombok.AllArgsConstructor;
  5. import lombok.Data;
  6. import lombok.NoArgsConstructor;
  7. @Data
  8. @NoArgsConstructor
  9. @AllArgsConstructor
  10. public class User {
  11.     private Long id;
  12.     //@TableField(value = "username")
  13.     private String name;
  14.     //@TableField(select = false)  // 查询时,不对age 字段进行查询
  15.     private Integer age;
  16.     private String email;
  17.     @TableField(value = "`desc`") // 注意:有两层,但最里面的哪个不是引号
  18.     private String desc;
  19.     @TableField(exist = false)  // 表示// ,不让该 online 属性,作为 SQL语句当中的查询字段
  20.     private Integer online;
  21. }
复制代码
在 resources 类路径下,创建一个名为 application.yaml 的yaml文件,编写连接数据库的信息内容。
  1. spring:
  2.   datasource:
  3.     driver-class-name: com.mysql.cj.jdbc.Driver
  4.     url: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
  5.     username: root
  6.     password: MySQL123
  7.   main:
  8.     banner-mode: off  #关闭 spring boot  在命令行当中的图标显示
  9. mybatis-plus:
  10.   global-config:
  11.     banner: false  # 关闭 mybatis-plus 在命令行当中的图标显示
  12.     db-config:
  13.       table-prefix: rainbowsea_ # 还可以通过统一添加前缀的方式:
  14.   configuration:
  15.     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 开启 Log 日志信息打印
  16.     map-underscore-to-camel-case: true # 开启驼峰,下划线映射规则
复制代码
编写配置类,通过配置类的方式,将数据库连接池换成为 Druid 数据库连接池。
  1. package com.rainbowsea.config;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import javax.sql.DataSource;
  7. @Configuration  // 标注配置类
  8. public class DruidDataSourceConfig {
  9.     @Bean
  10.     @ConfigurationProperties(value = "spring.datasource")
  11.     public DataSource getDataSource() {
  12.         DruidDataSource druidDataSource = new DruidDataSource();
  13.         return druidDataSource;
  14.     }
  15. }
复制代码
运行测试:看看是否切换为了 Druid 数据库连接池
  1. package com.rainbowsea;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.boot.test.context.SpringBootTest;
  5. import org.springframework.jdbc.core.JdbcTemplate;
  6. import javax.annotation.Resource;
  7. @SpringBootTest
  8. class Mp03ApplicationTests {
  9.     @Resource
  10.     //@Autowired
  11.     private JdbcTemplate jdbcTemplate;
  12.     @Test
  13.     void getDataSourceTest() {
  14.         System.out.println(jdbcTemplate.getDataSource().getClass());
  15.     }
  16. }
复制代码

编写:该User表的 mapper 方法。
  1. package com.rainbowsea.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.rainbowsea.bean.User;
  4. import org.apache.ibatis.annotations.Mapper;
  5. @Mapper  // 包扫描路径
  6. public interface UserMapper extends BaseMapper<User> {
  7. }
复制代码
3. 等值查询

3.1 eq (条件筛选属性 = ?)

使用QueryWrapper对象,构建查询条件
等值查询使用:userQueryWrapper.eq()
  1. default Children eq(R column, Object val) {
  2.    return eq(true, column, val);
  3. }
复制代码
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     @Test
  16.     void eq() {
  17.         // 1.创建条件查询对象
  18.         QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
  19.         // 2. 设置查询条件,指定查询的字段和匹配的值
  20.         QueryWrapper<User> eq = userQueryWrapper.eq("name", "Jone");
  21.         // 3. 进行条件查询
  22.         User user = userMapper.selectOne(eq);
  23.         System.out.println(user);
  24.     }
  25. }
复制代码

我们思考如果每次都是自己进行字段名称的编写,有可能会出现名称写错的情况,怎么避免这种情况呢,我们可以使用LambdaQueryWrapper对象,在构建字段时,使用方法引用的方式来选择字段,如许做可以避免字段拼写错误出现问题。
代码如下:
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // 使用: LambdaQueryWrapper 进行引用查询,防止报错
  16.     @Test
  17.     void eq2() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         LambdaQueryWrapper<User> queryWrapper = lambdaQueryWrapper.eq(User::getName, "Jone");
  20.         User user = userMapper.selectOne(queryWrapper);
  21.         System.out.println(user);
  22.     }
  23. }
复制代码

还要考虑一种情况,我们构建的条件是从哪里来的?应该是从客户端通过请求发送过来的,
由服务端接收的。在网站中一般都会有多个条件入口,用户可以选择一个或多个条件进行查询,那这个时候在请求时,我们不能确定所有的条件都是有值的,部门条件可能用户没有传值,那该条件就为null。
​                        比如在电商网站中,可以选择多个查询条件。

那为null的条件,我们是不需要进行查询条件拼接的,否则就会出现如下情况,将为null的条件进行拼接,筛选后无法查询出结果。

当然我们要办理这个问题,可以先判断是否为空,根据判断结果选择是否拼接该字段,这个功能其实不需要我们写,由MybatisPlus的方法已经提供好了。

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // 字段名为 不null的
  16.     @Test
  17.     void isNull2() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         String name = null;
  20.         //String name = "Jone";
  21.         //  public Children eq(boolean condition, R column, Object val) {
  22.         lambdaQueryWrapper.eq(name != null, User::getName, name);
  23.         //User user = userMapper.selectOne(lambdaQueryWrapper);
  24.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  25.         System.out.println(users);
  26.     }
  27. }
复制代码

3.2 allEq(满意多个条件字段的值的筛选)

先演示一下如何通过多个eq,构建多条件查询。
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // and 满足多个条件
  16.     @Test
  17.     void allEql() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         lambdaQueryWrapper.eq(User::getName, "Tom");
  20.         lambdaQueryWrapper.eq(User::getAge, 18);
  21.         User user = userMapper.selectOne(lambdaQueryWrapper);
  22.         System.out.println(user);
  23.     }
  24. }
复制代码
如果此时有多个条件需要同时判断,我们可以将这多个条件放入到Map聚会合,更加的方便
  1. allEq(Map<R, V> params, boolean null2IsNull)
  2. 参数params:表示传递的Map集合
  3. 参数null2IsNull:表示对于为null的条件是否判断isNull
复制代码
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // 属性值为 null 的查询,属性值不为 Null的不查询该字段
  16.     @Test
  17.     void allEq2() {
  18.         HashMap<String, Object> hashMap = new HashMap<>();
  19.         hashMap.put("name", "Tom");
  20.         hashMap.put("age",18);
  21.         //hashMap.put("age", null);  // 为null 的属性值,则会不查询
  22.         QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
  23.         //userQueryWrapper.allEq(hashMap,false); //  // 为null 的属性值,则会不查询
  24.         userQueryWrapper.allEq(hashMap, true);  // 为null,(name = ? AND age IS NULL) 查询
  25.         User user = userMapper.selectOne(userQueryWrapper);
  26.         System.out.println(user);
  27.     }
  28. }
复制代码
3.3 ne (不等于)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // 不等于数值的
  16.     @Test
  17.     void ne() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         lambdaQueryWrapper.ne(User::getName, "Tom");
  20.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  21.         System.out.println(users);
  22.     }
  23. }
复制代码
4. 范围查询

4.1 gt( > 大于的范围)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // > 查询
  16.     @Test
  17.     void gt() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         Integer age = 18;
  20.         lambdaQueryWrapper.gt(User::getAge, age);
  21.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  22.         System.out.println(users);
  23.     }
  24. }
复制代码
4.2 ge(>= 大于等于的范围)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // >=查询
  16.     @Test
  17.     void ge() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         Integer age = 18;
  20.         lambdaQueryWrapper.ge(User::getAge, age);
  21.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  22.         System.out.println(users);
  23.     }
  24. }
复制代码
4.3 lt(< 小于的范围)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // <
  16.     @Test
  17.     void lt() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         Integer age = 20;
  20.         lambdaQueryWrapper.lt(User::getAge, age);
  21.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  22.         System.out.println(users);
  23.     }
  24. }
复制代码
4.4 le(小于等于的范围)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // <=
  16.     @Test
  17.     void le() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         Integer age = 20;
  20.         LambdaQueryWrapper<User> lambdaQueryWrapper1 = lambdaQueryWrapper.le(User::getAge, age);
  21.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  22.         System.out.println(users);
  23.     }
  24. }
复制代码
7.2 notIn(不包含该内容的字段)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // 范围之间
  16.     @Test
  17.     void between() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         lambdaQueryWrapper.between(User::getAge, 10, 20);
  20.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  21.         System.out.println(users);
  22.     }
  23. }
复制代码
7.3 inSql(包含该内容的字段)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // 不在范围的:  (age NOT BETWEEN ? AND ?)
  16.     @Test
  17.     void notBetween() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         lambdaQueryWrapper.notBetween(User::getAge,10,18);
  20.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  21.         System.out.println(users);
  22.     }
  23. }
复制代码
7.4 notInSql(不包含该内容的字段)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // 模糊查询: %J%(String)
  16.     @Test
  17.     void like() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         lambdaQueryWrapper.like(User::getName,"J");
  20.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  21.         System.out.println(users);
  22.     }
  23. }
复制代码
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. @SpringBootTest  // 注意这个测试必须要有一个场景类才行,不然是无法运行的。测试的类不同的话,还需要指明
  11. // 包
  12. public class QueryTest {
  13.     @Autowired
  14.     private UserMapper userMapper;
  15.     // 模糊查询:  %e(String) 左边
  16.     @Test
  17.     void likeft() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         lambdaQueryWrapper.likeLeft(User::getName,"e");
  20.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  21.         System.out.println(users);
  22.     }
  23. }
复制代码
8. 分组查询

8.1 groupBy(分组的字段)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.rainbowsea.bean.User;
  3. import com.rainbowsea.mapper.UserMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import javax.annotation.Resource;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.List;
  10. @SpringBootTest
  11. public class QueryTest02 {
  12.     @Resource
  13.    private UserMapper userMapper;
  14.     // 判断是否为 null  WHERE (name IS NULL)
  15.     @Test
  16.     void isNUll3() {
  17.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  18.         lambdaQueryWrapper.isNull(User::getName);
  19.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  20.         System.out.println(users);
  21.     }
  22. }
复制代码
9. 聚合查询

9.1 having(聚合的字段)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.rainbowsea.bean.User;
  3. import com.rainbowsea.mapper.UserMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import javax.annotation.Resource;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.List;
  10. @SpringBootTest
  11. public class QueryTest02 {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     //  WHERE (name IS NULL)
  15.     @Test
  16.     void isNotNull() {
  17.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  18.         lambdaQueryWrapper.isNotNull(User::getName);
  19.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  20.         System.out.println(users);
  21.     }
  22. }
复制代码
10. 排序查询

10.1 orderByAsc(升序)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.rainbowsea.bean.User;
  3. import com.rainbowsea.mapper.UserMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import javax.annotation.Resource;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.List;
  10. @SpringBootTest
  11. public class QueryTest02 {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // 字段 = 值 or 字段 = 值 ->in
  15.     // r WHERE (age IN (?,?,?))
  16.     @Test
  17.     void in() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         ArrayList<Object> arrayList = new ArrayList<>();
  20.         Collections.addAll(arrayList, 18, 20, 22);
  21.         lambdaQueryWrapper.in(User::getAge, arrayList);
  22.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  23.         System.out.println(users);
  24.     }
  25. }
复制代码
10.2 orderByDesc(降序)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.rainbowsea.bean.User;
  3. import com.rainbowsea.mapper.UserMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import javax.annotation.Resource;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.List;
  10. @SpringBootTest
  11. public class QueryTest02 {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // 字段!=值 and 字段!=值 ->not in
  15.     //  WHERE (age NOT IN (?,?,?))
  16.     @Test
  17.     void notIn() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         ArrayList<Integer> arrayList = new ArrayList<>();
  20.         Collections.addAll(arrayList, 18, 20, 22);
  21.         lambdaQueryWrapper.notIn(User::getAge, arrayList);
  22.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  23.         System.out.println(users);
  24.     }
  25. }
复制代码
10.3 orderBy(多字段排序定义)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.rainbowsea.bean.User;
  3. import com.rainbowsea.mapper.UserMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import javax.annotation.Resource;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.List;
  10. @SpringBootTest
  11. public class QueryTest02 {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // er WHERE (age IN (18,20,22))
  15.     @Test
  16.     void inSql() {
  17.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  18.         lambdaQueryWrapper.inSql(User::getAge, "18,20,22");
  19.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  20.         System.out.println(users);
  21.     }
  22. }
复制代码
11. func 查询

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.rainbowsea.bean.User;
  3. import com.rainbowsea.mapper.UserMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import javax.annotation.Resource;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.List;
  10. @SpringBootTest
  11. public class QueryTest02 {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // age NOT IN (18,20,22))
  15.     @Test
  16.     void notInsql() {
  17.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  18.         lambdaQueryWrapper.notInSql(User::getAge, "18,20,22");
  19.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  20.         System.out.println(users);
  21.     }
  22. }
复制代码
12. 逻辑查询

12.1 and(与)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.rainbowsea.bean.User;
  3. import com.rainbowsea.mapper.UserMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import javax.annotation.Resource;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.List;
  10. @SpringBootTest
  11. public class QueryTest02 {
  12.     @Resource
  13.     private UserMapper userMapper;
  14.     // RE (age NOT IN (select age from rainbowsea_user where age > 20))
  15.     @Test
  16.     void notInSql2() {
  17.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  18.         lambdaQueryWrapper.notInSql(User::getAge, "select age from rainbowsea_user where age > 20");
  19.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  20.         System.out.println(users);
  21.     }
  22. }
复制代码
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.awt.*;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class QueryTest03 {
  14.     @Autowired
  15.     private UserMapper userMapper;
  16.     // select age,count(*) as field_count from rainbowsea_user group by age;
  17.     // 分组查询
  18.     @Test
  19.     void groupBy() {
  20.         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  21.         // 分组字段
  22.         queryWrapper.groupBy("age");
  23.         // 查询字段
  24.         queryWrapper.select("age,count(*) as field_count");
  25.         List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
  26.         System.out.println(maps);
  27.     }
  28. }
复制代码
12.2 or(或)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.awt.*;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class QueryTest03 {
  14.     @Autowired
  15.     private UserMapper userMapper;
  16.     // select age,count(*) as field_count from rainbowsea_user group by age HAVING field_count >=2;
  17.     // 聚合查询
  18.     @Test
  19.     void having() {
  20.         QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
  21.         // 查询字段
  22.         userQueryWrapper.select("age,count(*) as field_count");
  23.         // 聚合条件筛选
  24.         userQueryWrapper.having("field_count = 1");
  25.         List<Map<String, Object>> maps = userMapper.selectMaps(userQueryWrapper);
  26.         System.out.println(maps);
  27.     }
  28. }
复制代码
12.3 nested(非)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.awt.*;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class QueryTest03 {
  14.     @Autowired
  15.     private UserMapper userMapper;
  16.     // 降序
  17.     @Test
  18.     void orderByAsc() {
  19.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  20.         lambdaQueryWrapper.orderByAsc(User::getAge, User::getId);
  21.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  22.         System.out.println(users);
  23.     }
  24. }
复制代码
13. 自定义条件查询

13.1 apply(自定义查询条件)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.awt.*;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class QueryTest03 {
  14.     @Autowired
  15.     private UserMapper userMapper;
  16.     // 升序
  17.     @Test
  18.     void orderByDesc() {
  19.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  20.         lambdaQueryWrapper.orderByDesc(User::getAge, User::getId);
  21.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  22.         System.out.println(users);
  23.     }
  24. }
复制代码
14. last 查询(在sql语句的最末尾拼接“字符串”)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.awt.*;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class QueryTest03 {
  14.     @Autowired
  15.     private UserMapper userMapper;
  16.     @Test
  17.     void orderBy() {
  18.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  19.         // 设置排序字段和排序的方式
  20.         // 参数1:如果排序字段的值为null的时候,是否还要作为排序字段参与排序
  21.         // 参数2:是否升序排序,
  22.         // 参数3: 排序字段
  23.         //lambdaQueryWrapper.orderBy(true, true, User::getAge);
  24.         lambdaQueryWrapper.orderBy(false, true, User::getAge);
  25.         lambdaQueryWrapper.orderBy(true, false, User::getId);
  26.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  27.         System.out.println(users);
  28.     }
  29. }
复制代码
15. exists查询

15.1 exists(存在查询)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.awt.*;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class QueryTest03 {
  14.     @Autowired
  15.     private UserMapper userMapper;
  16.     //   // 可能会根据不同的请情况选择拼接不同的查询条件
  17.     @Test
  18.     void func() {
  19.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  20.         // 可能会根据不同的请情况选择拼接不同的查询条件
  21.       /*  lambdaQueryWrapper.func(new Consumer<LambdaQueryWrapper<User>>() {
  22.             @Override
  23.             public void accept(LambdaQueryWrapper<User> userLambdaQueryWrapper) {
  24.                 //if (true) {
  25.                 if (false) {
  26.                     userLambdaQueryWrapper.eq(User::getId,1);
  27.                 } else {
  28.                     userLambdaQueryWrapper.ne(User::getId,1);
  29.                 }
  30.             }
  31.         });*/
  32.         // 使用lambad表达式
  33.         lambdaQueryWrapper.func(userLambdaQueryWrapper -> {
  34.             if (false) {
  35.                 userLambdaQueryWrapper.eq(User::getId, 1);
  36.             } else {
  37.                 userLambdaQueryWrapper.ne(User::getId, 1);
  38.             }
  39.         });
  40.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  41.         System.out.println(users);
  42.     }
  43. }
复制代码
15.2 notExists(不存在查询)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.awt.*;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class QueryTest03 {
  14.     @Autowired
  15.     private UserMapper userMapper;
  16.     //  WHERE (age > ? AND age < ?)
  17.     @Test
  18.     void and() {
  19.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  20.         lambdaQueryWrapper.gt(User::getAge, 22).lt(User::getAge, 30);
  21.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  22.         System.out.println(users);
  23.     }
  24. }
复制代码
16. 字段查询

16.1 select(字段查询)

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.awt.*;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class QueryTest03 {
  14.     @Autowired
  15.     private UserMapper userMapper;
  16.     // WHERE (name = ? AND (age > ? OR age < ?))
  17.     @Test
  18.     void add2() {
  19.         LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  20.         lambdaQueryWrapper.eq(User::getName, "wang").and(i -> i.gt(User::getAge, 26).or().lt(User::getAge, 22));
  21.         List<User> users = userMapper.selectList(lambdaQueryWrapper);
  22.         System.out.println(users);
  23.     }
  24. }
复制代码
17. 末了:

“在这个末了的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时候再次相遇。”


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

伤心客

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表