记录Mybatis-Plus使用过程中多个OR和AND问题
记录一下MP使用过程中出现的问题
多个OR
和AND
问题#
出现问题的情况如下:
SELECT * FROM student WHERE id = 1 OR id = 2 AND age = 20;
# 查询结果为:id=2且age=20或者id=1,AND的优先级更高
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 国际」许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步