关于MyBatis Plus中使用or和and问题
最近在使用MyBatisPlus,发现在拼接条件的时候,and和or会出问题,比如下面这种
QueryWrapperuserWrapper=newQueryWrapper();
userWrapper.eq(“name”,name);userWrapper.eq(“pwd”,
pwd).or().eq(“phone”,phone);
这种写法拼出来的SQL语句是这样的:
select*fromuserwhere(name=?andpwd=?orphone=?)
这样子是肯定不行的,于是去官网查询,发现正确的写法是这样的
QueryWrapperuserWrapper=newQueryWrapper();
userWrapper.eq(“name”,name);userWrapper.and(wrapper->wrapper.eq(“pwd”,pwd).or().eq(“phone”,phone));
select*fromuserwherename=?and(pwd=?orphone=?)
补充:MyBatisPlus中and与or的连用
QueryWrapperuserWrapper=newQueryWrapper<>(); Stringtype=(String)map.get("type"); if(StringUtils.isNotBlank(type)){ userWrapper.eq("is_admin","admin".equals(type)?true:false); } Stringkeys=(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_nameASloginName, is_adminASadminUser, ... del_flagASdelFlag, remarks FROM sys_user WHERE is_admin=0 AND( login_nameLIKE'%j%' ORtelLIKE'%j%' ORemailLIKE'%j%' )
注意:
userWrapper.and(…)中的and为后面的条件加上了括号,如果没有and(),直接使用
userWrapper.like("login_name",keys).or().like("tel",keys).or().like("email",keys)
这一部分对应的SQL语句是不会被括号包围的(若使用or(…),同理);
2.and(…)中的wrapper->wrapper,注意名称需要相同。
到此这篇关于关于MyBatisPlus中使用or和and问题的文章就介绍到这了,更多相关MyBatisPlus使用or和and内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!