MP条件构造器之常用功能详解(or、and、exists、notExists)

2024-09-01 01:28

本文主要是介绍MP条件构造器之常用功能详解(or、and、exists、notExists),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

        • or
          • 使用范围
          • 方法签名
          • 参数说明
          • 示例
            • 使用 `or` 改变查询条件的连接方式为 OR
            • 动态根据条件改变查询条件的连接方式为 OR
            • 使用 `or(Consumer<Param> consumer)` 添加 OR 嵌套条件
            • 动态根据条件添加 OR 嵌套条件
        • and
          • 使用范围
          • 方法签名
          • 参数说明
          • 示例
            • 动态根据条件添加 AND 嵌套条件
        • exists
          • 使用范围
          • 方法签名
          • 参数说明
          • 示例
            • 动态根据条件添加 EXISTS 子查询
            • 生成的 SQL 语句
        • notExists
          • 使用范围
          • 方法签名
          • 参数说明
          • 示例

or

or 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于在查询条件中添加 OR 逻辑。通过调用 or 方法,可以改变后续查询条件的连接方式,从默认的 AND 连接变为 OR 连接。

使用范围
  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

方法签名
// 改变后续查询条件的连接方式为 OR
or()
or(boolean condition)// 添加 OR 嵌套条件
or(Consumer<Param> consumer)
or(boolean condition, Consumer<Param> consumer)

参数说明
  • condition:一个布尔值,用于控制是否应用这个 OR 逻辑。
  • consumer:一个 Consumer 函数式接口,它接受一个 Param 类型的参数,并可以调用 Param 对象上的方法来构建 OR 嵌套条件。

示例
使用 or 改变查询条件的连接方式为 OR

假设我们有一个 User 表,其中包含字段 usernameemail。我们希望查询 username 为 “admin” 或 email 为 “admin@example.com” 的用户。

普通 Wrapper (QueryWrapper)

// 创建 QueryWrapper 实例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 设置查询条件,username 为 "admin" 或 email 为 "admin@example.com"
queryWrapper.eq("username", "admin").or().eq("email", "admin@example.com");// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

Lambda Wrapper (LambdaQueryWrapper):

// 创建 LambdaQueryWrapper 实例
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// 设置查询条件,username 为 "admin" 或 email 为 "admin@example.com"
queryWrapper.eq(User::getUsername, "admin").or().eq(User::getEmail, "admin@example.com");// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

生成的 SQL 语句:

SELECT * FROM user WHERE username = 'admin' OR email = 'admin@example.com';



动态根据条件改变查询条件的连接方式为 OR

现在,我们希望根据动态条件来决定是否使用 OR 连接查询条件。

普通 Wrapper (QueryWrapper):

// 动态设置 OR 连接条件
boolean useOr = true; // 例如从外部条件中获得// 创建 QueryWrapper 实例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 根据条件动态设置查询条件,使用 OR 连接
queryWrapper.eq("username", "admin").or(useOr).eq("email", "admin@example.com");// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

Lambda Wrapper (LambdaQueryWrapper):

// 动态设置 OR 连接条件
boolean useOr = true; // 例如从外部条件中获得// 创建 LambdaQueryWrapper 实例
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// 根据条件动态设置查询条件,使用 OR 连接
queryWrapper.eq(User::getUsername, "admin").or(useOr).eq(User::getEmail, "admin@example.com");// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

如果 useOr true,生成的 SQL 语句如下:

SELECT * FROM user WHERE username = 'admin' OR email = 'admin@example.com';

如果 useOrfalse,生成的 SQL 语句如下:

SELECT * FROM user WHERE username = 'admin' AND email = 'admin@example.com';



使用 or(Consumer<Param> consumer) 添加 OR 嵌套条件

现在,我们希望查询 username 为 “admin”,或者 (email 为 “admin@example.com” 并且 status 为 “active”) 的用户。

普通 Wrapper (QueryWrapper)

// 创建 QueryWrapper 实例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 设置查询条件,username 为 "admin" 或者 (email 为 "admin@example.com" 并且 status 为 "active")
queryWrapper.eq("username", "admin")
.or(wrapper -> wrapper.eq("email", "admin@example.com").eq("status", "active"));// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

Lambda Wrapper (LambdaQueryWrapper)

// 创建 LambdaQueryWrapper 实例
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// 设置查询条件,username 为 "admin" 或者 (email 为 "admin@example.com" 并且 status 为 "active")
queryWrapper.eq(User::getUsername, "admin")
.or(wrapper -> wrapper.eq(User::getEmail, "admin@example.com").eq(User::getStatus, "active"));// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

生成的 SQL 语句:

SELECT * FROM user WHERE username = 'admin' OR (email = 'admin@example.com' AND status = 'active');



动态根据条件添加 OR 嵌套条件

现在,我们希望根据动态条件来决定是否使用 OR 嵌套条件。

普通 Wrapper (QueryWrapper):

// 动态设置嵌套 OR 条件
boolean useNestedOr = true; // 例如从外部条件中获得// 创建 QueryWrapper 实例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 根据条件动态设置查询条件,使用 OR 嵌套条件
queryWrapper.eq("username", "admin")
.or(useNestedOr, wrapper -> wrapper.eq("email", "admin@example.com").eq("status", "active"));// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

Lambda Wrapper (LambdaQueryWrapper):

// 动态设置嵌套 OR 条件
boolean useNestedOr = true; // 例如从外部条件中获得// 创建 LambdaQueryWrapper 实例
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// 根据条件动态设置查询条件,使用 OR 嵌套条件
queryWrapper.eq(User::getUsername, "admin")
.or(useNestedOr, wrapper -> wrapper.eq(User::getEmail, "admin@example.com").eq(User::getStatus, "active"));// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

如果 useNestedOrtrue,生成的 SQL 语句如下:

SELECT * FROM user WHERE username = 'admin' OR (email = 'admin@example.com' AND status = 'active');

**如果 **useNestedOrfals生成的 SQL 语句如下:

SELECT * FROM user WHERE username = 'admin' AND email = 'admin@example.com' AND status = 'active';




and

and 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于在查询条件中添加 AND 逻辑。通过调用 and 方法,可以创建 AND 嵌套条件,即在一个 AND 逻辑块中包含多个查询条件。

使用范围
  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

方法签名
// 添加 AND 嵌套条件
and(Consumer<Param> consumer)
and(boolean condition, Consumer<Param> consumer)

参数说明
  • consumer:一个 Consumer 函数式接口,它接受一个 Param 类型的参数,并可以调用 Param 对象上的方法来构建 AND 嵌套条件。
  • condition:一个布尔值,用于控制是否应用这个 AND 嵌套逻辑。

示例

假设我们有一个 User 表,其中包含字段 usernameemailstatus。我们希望查询 username 为 “admin”,并且 email 为 “admin@example.com” 且 status 为 “active” 的用户。

普通 Wrapper (QueryWrapper)

// 创建 QueryWrapper 实例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 设置查询条件,username 为 "admin" 并且 (email 为 "admin@example.com" 且 status 为 "active")
queryWrapper.eq("username", "admin")
.and(wrapper -> wrapper.eq("email", "admin@example.com").eq("status", "active"));// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

Lambda Wrapper (LambdaQueryWrapper):

// 创建 LambdaQueryWrapper 实例
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// 设置查询条件,username 为 "admin" 并且 (email 为 "admin@example.com" 且 status 为 "active")
queryWrapper.eq(User::getUsername, "admin")
.and(wrapper -> wrapper.eq(User::getEmail, "admin@example.com").eq(User::getStatus, "active"));// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

生成的 SQL 语句:

SELECT * FROM user WHERE username = 'admin' AND (email = 'admin@example.com' AND status = 'active');



动态根据条件添加 AND 嵌套条件

现在,我们希望根据动态条件来决定是否使用 AND 嵌套条件。

普通 Wrapper (QueryWrapper)

// 动态设置嵌套 AND 条件
boolean useNestedAnd = true; // 例如从外部条件中获得// 创建 QueryWrapper 实例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 根据条件动态设置查询条件,使用 AND 嵌套条件
queryWrapper.eq("username", "admin")
.and(useNestedAnd, wrapper -> wrapper.eq("email", "admin@example.com").eq("status", "active"));// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

Lambda Wrapper (LambdaQueryWrapper):

// 动态设置嵌套 AND 条件
boolean useNestedAnd = true; // 例如从外部条件中获得// 创建 LambdaQueryWrapper 实例
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// 根据条件动态设置查询条件,使用 AND 嵌套条件
queryWrapper.eq(User::getUsername, "admin")
.and(useNestedAnd, wrapper -> wrapper.eq(User::getEmail, "admin@example.com").eq(User::getStatus, "active"));// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

生成的 SQL 语句
如果 useNestedAndtrue,生成的 SQL 语句如下:

SELECT * FROM user WHERE username = 'admin' AND (email = 'admin@example.com' AND status = 'active');

如果 useNestedAndfalse,生成的 SQL 语句如下:

SELECT * FROM user WHERE username = 'admin' AND email = 'admin@example.com' AND status = 'active';




exists

exists 方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于在查询中添加一个 EXISTS 子查询。通过调用 exists 方法,可以将一个完整的 SQL 子查询作为 EXISTS 条件添加到主查询中。

使用范围
  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

方法签名
// 添加 EXISTS 子查询
exists(String existsSql)
exists(boolean condition, String existsSql)

参数说明
  • existsSql:一个字符串,包含要作为 EXISTS 条件的 SQL 子查询。
  • condition:一个布尔值,用于控制是否应用这个 EXISTS 条件。

示例

假设我们有两个表:User 表和 Order 表。我们希望查询那些至少有一笔订单的用户,即查询 User 表中存在与 Order 表关联的记录的用户。

普通 Wrapper (QueryWrapper)

// 创建 QueryWrapper 实例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 添加 EXISTS 子查询,查询至少有一笔订单的用户
queryWrapper.exists("SELECT 1 FROM orders WHERE orders.user_id = user.id");// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

Lambda Wrapper (LambdaQueryWrapper)

// 创建 LambdaQueryWrapper 实例
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// 添加 EXISTS 子查询,查询至少有一笔订单的用户
queryWrapper.exists("SELECT 1 FROM orders WHERE orders.user_id = user.id");// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

生成的 SQL 语句:

SELECT * FROM user WHERE EXISTS (SELECT 1 FROM orders WHERE orders.user_id = user.id);



动态根据条件添加 EXISTS 子查询

现在,我们希望根据动态条件来决定是否使用 EXISTS 子查询。

普通 Wrapper (QueryWrapper)

// 动态设置 EXISTS 条件
boolean useExists = true; // 例如从外部条件中获得// 创建 QueryWrapper 实例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 根据条件动态设置 EXISTS 子查询,查询至少有一笔订单的用户
queryWrapper.exists(useExists, "SELECT 1 FROM orders WHERE orders.user_id = user.id");// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

Lambda Wrapper (LambdaQueryWrapper)

// 动态设置 EXISTS 条件
boolean useExists = true; // 例如从外部条件中获得// 创建 LambdaQueryWrapper 实例
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// 根据条件动态设置 EXISTS 子查询,查询至少有一笔订单的用户
queryWrapper.exists(useExists, "SELECT 1 FROM orders WHERE orders.user_id = user.id");// 执行查询,获取符合条件的用户列表
List<User> users = userMapper.selectList(queryWrapper);

生成的 SQL 语句

如果 useExiststrue,生成的 SQL 语句如下:

SELECT * FROM user WHERE EXISTS (SELECT 1 FROM orders WHERE orders.user_id = user.id);

如果 useExistsfalse,生成的 SQL 语句如下:

SELECT * FROM user;




notExists

notExists 方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于在查询中添加一个 NOT EXISTS 子查询。通过调用 notExists 方法,可以将一个完整的 SQL 子查询作为 NOT EXISTS 条件添加到主查询中。

使用范围
  • QueryWrapper
  • LambdaQueryWrapper
  • UpdateWrapper
  • LambdaUpdateWrapper

方法签名
// 添加 NOT EXISTS 子查询
notExists(String notExistsSql)
notExists(boolean condition, String notExistsSql)

参数说明
  • notExistsSql:一个字符串,包含要作为 NOT EXISTS 条件的 SQL 子查询。
  • condition:一个布尔值,用于控制是否应用这个 NOT EXISTS 条件。

示例

exist 基本一致,照猫画虎。

这篇关于MP条件构造器之常用功能详解(or、and、exists、notExists)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125557

相关文章

基于C++的UDP网络通信系统设计与实现详解

《基于C++的UDP网络通信系统设计与实现详解》在网络编程领域,UDP作为一种无连接的传输层协议,以其高效、低延迟的特性在实时性要求高的应用场景中占据重要地位,下面我们就来看看如何从零开始构建一个完整... 目录前言一、UDP服务器UdpServer.hpp1.1 基本框架设计1.2 初始化函数Init详解

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

Springboot配置文件相关语法及读取方式详解

《Springboot配置文件相关语法及读取方式详解》本文主要介绍了SpringBoot中的两种配置文件形式,即.properties文件和.yml/.yaml文件,详细讲解了这两种文件的语法和读取方... 目录配置文件的形式语法1、key-value形式2、数组形式读取方式1、通过@value注解2、通过

自定义注解SpringBoot防重复提交AOP方法详解

《自定义注解SpringBoot防重复提交AOP方法详解》该文章描述了一个防止重复提交的流程,通过HttpServletRequest对象获取请求信息,生成唯一标识,使用Redis分布式锁判断请求是否... 目录防重复提交流程引入依赖properties配置自定义注解切面Redis工具类controller

MySQL 筛选条件放 ON后 vs 放 WHERE 后的区别解析

《MySQL筛选条件放ON后vs放WHERE后的区别解析》文章解释了在MySQL中,将筛选条件放在ON和WHERE中的区别,文章通过几个场景说明了ON和WHERE的区别,并总结了ON用于关... 今天我们来讲讲数据库筛选条件放 ON 后和放 WHERE 后的区别。ON 决定如何 "连接" 表,WHERE

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

Qt实现对Word网页的读取功能

《Qt实现对Word网页的读取功能》文章介绍了几种在Qt中实现Word文档(.docx/.doc)读写功能的方法,包括基于QAxObject的COM接口调用、DOCX模板替换及跨平台解决方案,重点讨论... 目录1. 核心实现方式2. 基于QAxObject的COM接口调用(Windows专用)2.1 环境

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

MybatisPlus中几种条件构造器运用方式

《MybatisPlus中几种条件构造器运用方式》QueryWrapper是Mybatis-Plus提供的一个用于构建SQL查询条件的工具类,提供了各种方法如eq、ne、gt、ge、lt、le、lik... 目录版本介绍QueryWrapperLambdaQueryWrapperUpdateWrapperL