栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于MyBatis Plus中使用or和and问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于MyBatis Plus中使用or和and问题

最近在使用MyBatis Plus,发现在拼接条件的时候,and和or会出问题,比如下面这种

QueryWrapper userWrapper = new QueryWrapper();
userWrapper.eq(“name”, name); userWrapper.eq(“pwd”,
pwd).or().eq(“phone”, phone);

这种写法拼出来的SQL语句是这样的:

select * from user where (name = ? and pwd= ? or phone = ?)

这样子是肯定不行的,于是去官网查询,发现正确的写法是这样的

QueryWrapper userWrapper = new QueryWrapper();
userWrapper.eq(“name”, name); userWrapper.and(wrapper ->wrapper.eq(“pwd”, pwd).or().eq(“phone”, phone));

select * from user where name = ? and ( pwd= ? or phone = ?)

补充:MyBatisPlus中and与or的连用

 QueryWrapper userWrapper = new QueryWrapper<>();
  String type = (String) map.get("type");
  if(StringUtils.isNotBlank(type)) {
    userWrapper.eq("is_admin", "admin".equals(type) ? true : false);
  }
  String keys = (String) map.get("key");
  if(StringUtils.isNotBlank(keys)) {
    userWrapper.and(wrapper -> wrapper.like("login_name", keys).or().like("tel", keys).or().like("email", keys));
  }

对应打印的SQL语句为:

SELECt
    id,
    login_name AS loginName,
    is_admin AS adminUser,
    ...
    del_flag AS delFlag,
    remarks 
  FROM
    sys_user 
  WHERe
    is_admin = 0 
    AND (
      login_name LIKE '%j%' 
      OR tel LIKE '%j%' 
      OR email LIKE '%j%' 
    )

注意:

userWrapper.and(…)中的and为后面的条件加上了括号,如果没有and(),直接使用

userWrapper.like("login_name", keys).or().like("tel", keys).or().like("email", keys)

这一部分对应的SQL语句是不会被括号包围的(若使用or(…),同理);

2. and(…)中的wrapper -> wrapper,注意名称需要相同。

到此这篇关于关于MyBatis Plus中使用or和and问题的文章就介绍到这了,更多相关MyBatis Plus使用or和and内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/129698.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号