記錄Mybatis-Plus使用過程中多個OR和AND問題


記錄一下MP使用過程中出現的問題

多個ORAND問題

出現問題的情況如下:

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語句失效等等,此問題應當得到注意!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM