关于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<User> 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内容请搜索好吧啦网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好吧啦网!
相关文章:
1. 恢复从 Access 2000、 Access 2002 或 Access 2003 中数据库删除表的方法2. Mysql入门系列:MYSQL创建、删除、索引和更改表3. 启动MYSQL出错 Manager of pid-file quit without updating file.4. Mysql入门系列:建立MYSQL客户机程序的一般过程5. MySQL 8.0 之索引跳跃扫描(Index Skip Scan)6. Microsoft Office Access修改代码字体大小的方法7. ACCESS转SQL数据库相关的几个技能8. mysql数据存放的位置在哪9. 数据库人员手册之ORACLE应用源码10. 循序渐进讲解Oracle数据库管理员的职责
