mybatispluswhereQueryWrapper加括号嵌套查询方式
短信预约 -IT技能 免费直播动态提醒
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相当于一个括号
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341