mybatisplus 无法使用and嵌套
时间: 2025-04-19 09:52:14 浏览: 30
### MyBatisPlus 中 `AND` 嵌套使用解决方案
在处理复杂的查询条件时,MyBatisPlus 提供了多种方式来构建动态 SQL 查询。对于 `AND` 条件的嵌套问题,可以通过使用 Wrapper 类中的方法链式调用来实现复杂条件组合。
#### 方法一:使用 LambdaQueryWrapper 实现 AND 嵌套
LambdaQueryWrapper 支持通过 lambda 表达式安全地编写查询条件,并允许灵活地嵌套多个 `AND` 和其他操作符:
```java
// 创建 LambdaQueryWrapper 对象并设置查询条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getId, userId)
.and(i -> i.eq(User::getStatus, 1).or().eq(User::getRole, "admin"))
.ne(User::getDeleted, true);
```
此代码片段展示了如何在一个查询中同时应用多个 `AND` 及其内部的 `OR` 条件[^1]。
#### 方法二:利用 QueryWrapper 的嵌套函数
除了 Lambda 版本外,还可以直接使用 QueryWrapper 进行更底层的操作,适合不希望引入额外依赖的情况:
```java
// 构建基础查询条件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", userId);
// 添加带有 AND 嵌套的复合条件
queryWrapper.and(wrapper -> {
wrapper.eq("status", 1)
.or()
.eq("role", "admin");
});
// 排除已标记为删除的数据项
queryWrapper.ne("deleted", true);
```
这种方式同样能够有效地表达复杂的布尔逻辑关系,而不需要担心字段名拼写错误等问题[^2]。
为了进一步优化性能,在设计上应考虑避免过多冗余记录的存在,例如当不再需要某些旧版本数据时,可将其迁移至历史档案表而非简单地标记为不可见状态。
阅读全文
相关推荐


















