mybatis plus or 带参数查询
时间: 2025-05-05 19:05:08 浏览: 37
### MyBatis Plus 中使用 OR 条件进行带参数查询
在 MyBatis Plus 的 `QueryWrapper` 或其扩展类 `LambdaQueryWrapper` 中,可以通过链式调用来构建复杂的 SQL 查询语句。对于带有 OR 条件的查询,可以利用 `.or()` 方法来实现逻辑上的“或”操作。
下面是一个完整的示例代码展示如何通过 MyBatis Plus 实现 OR 条件下的带参数查询:
#### 示例代码
```java
public Page<User> selectUserPageVoByCondition(Integer pageNumber, Integer pageSize, String nameParam, String statusParam, String password) {
return this.userMapper.selectPage(
new Page<>(pageNumber, pageSize),
new QueryWrapper<User>()
.select("id", "name", "status") // 只选择特定字段
.lambda()
.and(wrapper -> wrapper
.like(StringUtils.isNotBlank(nameParam), User::getName, nameParam) // 如果 nameParam 不为空,则执行 LIKE 操作
.or() // 开始 OR 部分
.like(StringUtils.isNotBlank(statusParam), User::getStatus, statusParam)) // 如果 statusParam 不为空,则执行 LIKE 操作
.eq(password != null && !password.isEmpty(), User::getPassword, password) // 密码相等条件
);
}
```
上述代码实现了以下功能:
- **分页查询**:通过传入 `pageNumber` 和 `pageSize` 参数完成分页。
- **OR 条件支持**:当 `nameParam` 或 `statusParam` 存在时,分别对其执行模糊匹配,并通过 `.or()` 将两者连接起来[^3]。
- **额外条件过滤**:如果密码存在,则进一步筛选符合条件的数据。
#### 关键点解析
1. **`.and()` 方法**
用于包裹一组 AND 连接的子条件,在该组内部还可以嵌套其他复杂条件。
2. **`.or()` 方法**
表示当前条件与其他条件之间为 OR 关系。它通常紧跟在一个具体的条件之后使用,或者作为独立的部分加入到整个查询中。
3. **字符串工具方法**
建议配合 Apache Commons Lang 库中的 `StringUtils` 工具类判断输入参数是否有效(如非空、非空白字符),从而避免不必要的数据库性能开销。
4. **Lambda 表达式的简洁写法**
使用 `LambdaQueryWrapper` 能够更直观地表达实体属性与表列之间的映射关系,减少硬编码带来的维护成本。
---
### 注意事项
- 当涉及多层嵌套逻辑时,请注意括号闭合以及优先级控制,以免因语法错误导致运行失败。
- 对于大批量数据处理场景下,应合理设置索引来优化查询效率。
---
阅读全文
相关推荐

















