关于MyBatis Plus中使用or和and问题
关于MyBatis Plus中使用or和and问题
最近在使用MyBatis Plus,发现在拼接条件的时候,and和or会出问题,比如下面这种
QueryWrapper userWrapper = new QueryWrapper();
userWrappevChSqXoQPir.eq(“name”, name); userWrapper.eq(“pwd”,
pwd).or().eq(“phone”, phone);
这种写法拼出来的SQL语句是这样的:
select * from http://user where (name = ? and pwd= ? or phone http://= ?)
这样子是肯定不行的,于是去官网查询,发现正确的写法是这样的
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
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))vChSqXoQPi {
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,注意名称需要相同。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~