记录Mybatis-Plus使用过程中多个OR和AND问题

记录一下MP使用过程中出现的问题

多个ORAND问题#

出现问题的情况如下:

SELECT * FROM student WHERE id = 1 OR id = 2 AND age = 20;
# 查询结果为:id=2且age=20或者id=1AND的优先级更高
SELECT * FROM student WHERE (id = 1 OR id = 2) AND age = 20;
# 查询结果为:age=20条件下,id=1或者id=2

在MP中,两种的写法也不同

QueryWrapper<Student> queryWrapper = new QueryWrapper();
// 对于前者
queryWrapper.eq("id", 1).or().eq("id", 2).eq("age", 20);
// 对于后者
queryWrapper.nested(wrapper -> {
    return wrapper.eq("id", 1).or().eq("id", 2);
}).eq("age", 20);
// 或 SELECT * FROM student WHERE age = 20 AND (id = 1 OR id = 2);
queryWrapper.eq("age", 20).and(wrapper -> {
    return wrapper.eq("id", 1).or().eq("id", 2);
});

此问题经常导致查询的结果不尽人意,比如OR导致后续AND语句失效等等,此问题应当得到注意!

作者:cphovo

出处:https://www.cnblogs.com/cphovo/p/14845602.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   kosihpc  阅读(2803)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示