mybatis plus怎么加少筛选
时间: 2025-06-23 09:51:55 浏览: 9
### 优化 MyBatis-Plus 筛选条件的方法
在 MyBatis-Plus 中,可以通过多种方式减少或优化筛选条件以提升查询性能。以下是一些关键点和实现方法:
#### 1. 使用 `Wrapper` 的链式调用减少冗余条件
MyBatis-Plus 提供了灵活的 `Wrapper` 接口(如 `QueryWrapper` 和 `UpdateWrapper`),允许开发者通过链式调用动态添加筛选条件。如果某些条件不需要参与查询,可以使用布尔值控制是否添加这些条件[^2]。
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 18)
.like(StringUtils.isNotBlank(name), "name", name) // 动态判断是否添加 name 条件
.ge(StringUtils.isNotBlank(startDate), "create_time", startDate); // 动态判断时间范围
```
#### 2. 利用 `nested` 方法构建复杂条件
对于复杂的嵌套查询条件,`nested` 方法可以帮助更清晰地组织逻辑。例如,当需要对多个字段进行分组时,可以使用 `nested` 方法来避免重复代码[^3]。
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.nested(wrapper -> wrapper.eq("age", 18).or().eq("gender", "male"))
.and(wrapper -> wrapper.ge("score", 90).le("score", 100));
```
#### 3. 自定义 SQL 片段优化查询
在某些场景下,手写 SQL 可以显著提升查询效率。MyBatis-Plus 提供了 `setSql` 方法,允许直接插入自定义 SQL 片段[^4]。这种方式特别适合需要对数据进行复杂更新或查询的情况。
```java
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.setSql("age = age + 1, score = score * 1.1");
updateWrapper.eq("id", userId);
// 执行更新操作
userMapper.update(null, updateWrapper);
```
#### 4. 使用分页插件优化大数据量查询
MyBatis-Plus 内置了分页功能,能够有效减少返回结果集的大小,从而降低内存消耗和网络传输开销。分页插件会自动优化 SQL,避免全表扫描[^1]。
```java
Page<User> page = new Page<>(current, size);
IPage<User> userPage = userMapper.selectPage(page, null);
// 获取分页后的数据
List<User> users = userPage.getRecords();
long total = userPage.getTotal();
```
#### 5. 避免不必要的子查询
在设计 SQL 时,尽量减少子查询的使用,因为子查询可能会导致性能下降。可以通过调整表结构或索引来优化查询逻辑[^2]。
---
### 示例代码:优化后的查询实现
以下是一个综合示例,展示如何在 MyBatis-Plus 中减少筛选条件并优化查询:
```java
public List<User> getUsersWithOptimizedConditions(String name, Integer age, Date startDate) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 动态添加条件
if (StringUtils.isNotBlank(name)) {
queryWrapper.like("name", name);
}
if (age != null) {
queryWrapper.eq("age", age);
}
if (startDate != null) {
queryWrapper.ge("create_time", startDate);
}
// 分页查询
Page<User> page = new Page<>(1, 10);
IPage<User> userPage = userMapper.selectPage(page, queryWrapper);
return userPage.getRecords();
}
```
---
阅读全文
相关推荐


















