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。

推薦閱讀: