Mybatis-Plus QueryWrapper中的or与and的巧妙运用
在开发过程中,我们经常遇到需要根据多个条件进行数据库查询的情况。最近,我在使用mybatis-plus的QueryWrapper组件时,遇到了一个关于or和and使用的问题。
我们的基础查询条件很明确,就是要根据用户的ID来筛选数据:
```java
queryWrapper.eq("user_id", userInfo.getUserId);
```
在此基础上,我们需要根据用户的名字和其他管理员名字进行模糊查询。这里就涉及到了or的使用。在刚开始的时候,我使用了如下的代码:
```java
if(StringUtils.isNotBlank(name)) {
queryWrapper.like("user_name", name)
.or()
.like("user_admin_name", name);
}
```
当这两个条件同时存在时,我发现查询结果并不符合预期,出现了一些非当前角色的数据。经过检查,我发现生成的SQL语句是这样的:
```sql
where user_id=39139 and user_name like 39%叶%39 or user_admin_name like 39%叶%39
```
这样的写法导致只要满足其中一个条件,就会返回结果。这显然不是我们想要的结果。于是我开始寻找解决方案,并最终在QueryWrapper组件中找到了and()的使用方式。使用and()可以将多个条件组合在一起,确保只有同时满足这些条件时才会返回结果。修改后的代码如下:
```java
queryWrapper.and(wq -> {
wq.like("user_name", name)
.or()
.like("user_admin_name", name);
});
```
生成的SQL语句会变成这样:
```sql
where user_id=39139 and (user_name like 39%叶%39 or user_admin_name like 39%叶%39)
```
这样的写法更符合我们的预期,能够准确地筛选出符合条件的数据。如果你在开发中需要打印SQL语句以便于调试,可以在mybatis的配置中进行设置,使其在控制台输出SQL语句。这样你就可以直观地看到生成的SQL语句是否正确。
正确使用mybatis-plus的QueryWrapper组件中的or和and,可以帮助我们更灵活地构建查询条件,提高开发效率。希望这篇文章能帮助你解决在使用QueryWrapper时遇到的问题。