mybatisplus where QueryWrapper加括號嵌套查詢方式
where QueryWrapper加括號嵌套查詢
之前的代碼是這個樣子的:
QueryWrapper<RyxyMemberEntity> wrapper = new QueryWrapper<>(); wrapper.eq("phoneNumber", phone); if (StringUtils.isEmpty(scenetype)){ wrapper.isNull("scenetype").or().eq("scenetype", ""); } wrapper.eq("delFlag", "0");
相對應的SQL語句如下:
WHERE( phoneNumber = 156****8888 AND scenetype IS NULL OR scenetype = "" AND delFlag = 0)
這並不是我想要的sql語句,查詢的數據也不正確,對scenetype的查詢應該是括起來的,滿足其一條件即可,也就是這樣:
WHERE( phoneNumber = 156****8888 AND (scenetype IS NULL OR scenetype = "") AND delFlag = 0)
相對應的代碼應該這樣寫才對:
QueryWrapper<RyxyMemberEntity> wrapper = new QueryWrapper<>(); wrapper.eq("phoneNumber", phone); if(StringUtils.isEmpty(scenetype)) { wrapper.and( e -> e.isNull("scenetype") .or().eq("scenetype", "") ); } wrapper.eq("delFlag", "0");
mybatisplus查詢語句加括號(.or(),.and())
java代碼:
QueryWrapper<Entity> wrapper = new QueryWrapper<>(); wrapper.ne("id", param.getId()) wrapper.and(QueryWrapper -> QueryWrapper.eq("name", name).or().eq("mark", mark)); entityMapper.selectList(wrapper);
等價sql
SELECT id FROM t_entity WHERE (id <> ? AND (name = ? OR mark = ?))
每個and相當於一個括號
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Mybatis Plus QueryWrapper復合用法詳解
- Mapper層繼承BaseMapper<T>需要引入的pom依賴方式
- 淺談mybatisPlus的Ipage分頁和map參數的問題
- mybatisplus如何在xml的連表查詢中使用queryWrapper
- MybatisPlus使用聚合函數的示例代碼