java中and和or_关于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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值