当前位置: 首页 > news >正文

开发避坑指南(44):Mybatis-plus QueryWrapper and()拼接嵌套复杂条件的技巧

需求

Mybatis-plus 的查询条件构造器QueryWrapper要构造and条件子句里面有or条件子句或者嵌套其他复杂条件,该怎么实现?目标语句如下:AND (push_status = ‘N’ OR push_status IS NULL)

select * from t_order where delete_status = 'N' AND (push_status = 'N' OR push_status IS NULL);

错误写法

QueryWrapper<Order> queryWrapper = new QueryWrapper();
queryWrapper.eq("delete_status", "N");
queryWrapper.eq("push_status", "N").or().isNull("batch_status");

上述写法实际执行的sql语句是:

select * from t_order where delete_status = 'N' AND push_status = 'N' OR push_status IS NULL;

并没有将整个“push_status = ‘N’ OR push_status IS NULL”作为and 的子句,直接链式调用 or() 可能导致条件分组不符合我们的预期。

正确写法

与或混合‌:通过 and(Consumer<QueryWrapper> consumer) 实现条件分组,确保括号优先级。

QueryWrapper<Order> queryWrapper = new QueryWrapper();
queryWrapper.eq("delete_status", "N");
queryWrapper.and(wrapper -> wrapper.eq("push_status", "N")).or().isNull("push_status"));

如果在 Lambda 表达式内部有多个条件要嵌套,可以用代码块改成下面写法,如:

QueryWrapper<Order> queryWrapper = new QueryWrapper();
queryWrapper.eq("delete_status", "N");
queryWrapper.and(wrapper -> {wrapper.eq("push_status", "N")).or().isNull("push_status");wrapper.eq("create_user", "test"));
});

文章转载自:

http://QdVH7Taz.hcbky.cn
http://6nWoMSCO.hcbky.cn
http://eUqwbsDs.hcbky.cn
http://sdqps9f8.hcbky.cn
http://Bppsq1FO.hcbky.cn
http://gLTqKQdf.hcbky.cn
http://vB2i2Ua0.hcbky.cn
http://GC00F98u.hcbky.cn
http://6I8GQb3M.hcbky.cn
http://1EO1yzdw.hcbky.cn
http://HJIJvuBo.hcbky.cn
http://6yGagdGG.hcbky.cn
http://GplCPDSH.hcbky.cn
http://iivnW5Gn.hcbky.cn
http://2xgCngj3.hcbky.cn
http://HPjgaH6L.hcbky.cn
http://9vR6UCJC.hcbky.cn
http://pobbTChv.hcbky.cn
http://hM7AoZeF.hcbky.cn
http://F3h6R916.hcbky.cn
http://jV0WK2cP.hcbky.cn
http://sCknyWeh.hcbky.cn
http://958prQPN.hcbky.cn
http://vwRg33yM.hcbky.cn
http://zsxjAFlb.hcbky.cn
http://ihViNAtF.hcbky.cn
http://XJG6Q2Oq.hcbky.cn
http://Zuki9WZy.hcbky.cn
http://OHJac69q.hcbky.cn
http://Kh8eejGA.hcbky.cn
http://www.dtcms.com/a/374992.html

相关文章:

  • 消息队列(MQ)初级入门:详解RabbitMQ与Kafka
  • R语言对excel中多个sheet子表批量进行地理探测器计算
  • 开讲啦| MBSE公开课:第六集 MBSE远期目标与总结(完结)
  • 实习项目包装--HTTP 协议和 Web API
  • linux升级系统,重启出现Minimal BASH-like line editingis supported
  • ARM架构---指令集分类、内核组成,RAM与ROM的分类、工作模式、异常处理机制、立即数、s后缀、指令说明、汇编和 C 函数的相互调用
  • Qwen3微调教程:从零开始训练你的定制语言模型
  • 本地一键部署IndexTTS2,生成情绪饱满的语音,支持Windows和Mac
  • VMware虚拟机CentOS磁盘扩容完整指南(解决growpart报错 LVM扩容)
  • 【增删改查操作】
  • MySQL 多表操作与复杂查询:深入理解多表关系和高级查询
  • 网络相关知识整理
  • 提升网站用户体验的方法 | 网站优化与用户界面设计
  • CSS的文本样式
  • Flex布局——详解
  • 深度解析CSS单位与媒体查询:构建现代化响应式布局的核心技术
  • 项目组件抽离封装思路
  • Elasticsearch面试精讲 Day 13:索引生命周期管理ILM
  • 【MySQL】从零开始了解数据库开发 --- 数据类型
  • ElasticSearch复习指南:从零搭建一个商品搜索案例
  • 宋红康 JVM 笔记 Day15|垃圾回收相关算法
  • 【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
  • 【python实用小脚本-211】[硬件互联] 桌面壁纸×Python梦幻联动|用10行代码实现“开机盲盒”自动化改造实录(建议收藏)
  • 前端安全攻防:XSS, CSRF 等常见威胁的防范与检测指南
  • 算法题(203):矩阵最小路径和
  • 强化学习在复杂调度问题中的常见陷阱与改进思路
  • AI基础设施——NVIDIA GB300 NVL72
  • 实战项目-----在图片 hua.png 中,用红色画出花的外部轮廓,用绿色画出其简化轮廓(ε=周长×0.005),并在同一窗口显示
  • 第一章 神经网络的复习
  • Spring Cloud 配置中心