使用mybatis plus時,使用.or()去拼接查詢條件時
錯誤的示範
studentService.list(new QueryWrapper<Student>().like("name", name).or().like("add", addr))
生成的查詢語句是
SELECT id,name,addr FROM Student WHERE is_delete=0 AND name LIKE '%王%' OR addr LIKE '%上%';
這個時候就會發現 is_delete=0 和 or 成並列的條件了,如果一個文件被刪了 但是addr爲“上”就會被查出來,這是不被允許的
正確的示範
studentService.list(new QueryWrapper<Student>().and(wrapper->wrapper.like("name", name).or().like("age", age)))
生成的查詢語句是
SELECT id,name,addr FROM Student WHERE is_delete=0 AND (name LIKE '%王%' OR addr LIKE '%上%');
這個時候會給 or 並列的條件加上一個括號,如果 is_delete=0 的話就會過濾掉