MyBatis Plus中如何正确使用or和and进行条件查询?

2026-04-30 04:032阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计455个文字,预计阅读时间需要2分钟。

MyBatis Plus中如何正确使用or和and进行条件查询?

在使用MyBatis Plus进行查询时,拼接条件时使用and或or可能会遇到问题。例如,以下代码:

javaQueryWrapper userWrapper=new QueryWrapper();userWrapper.eq(name, name).or().eq(phone, phone);

这段代码在拼接条件时可能会出现问题,因为`or()`方法应该在`eq()`方法之前调用,否则会导致逻辑错误。正确的写法应该是:

javaQueryWrapper userWrapper=new QueryWrapper();userWrapper.eq(name, name).or().eq(phone, phone);

最近在使用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语句为:

MyBatis Plus中如何正确使用or和and进行条件查询?

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内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

本文共计455个文字,预计阅读时间需要2分钟。

MyBatis Plus中如何正确使用or和and进行条件查询?

在使用MyBatis Plus进行查询时,拼接条件时使用and或or可能会遇到问题。例如,以下代码:

javaQueryWrapper userWrapper=new QueryWrapper();userWrapper.eq(name, name).or().eq(phone, phone);

这段代码在拼接条件时可能会出现问题,因为`or()`方法应该在`eq()`方法之前调用,否则会导致逻辑错误。正确的写法应该是:

javaQueryWrapper userWrapper=new QueryWrapper();userWrapper.eq(name, name).or().eq(phone, phone);

最近在使用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语句为:

MyBatis Plus中如何正确使用or和and进行条件查询?

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内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!