mybatisplus配上stream流
时间: 2025-01-12 14:35:16 浏览: 37
### 结合MyBatis Plus与Java Stream API
为了实现MyBatis Plus与Java Stream API的有效结合,可以利用MyBatis Plus提供的`Wrapper`接口以及Stream API的强大功能来简化数据库操作。具体来说,通过将查询结果转换成流的形式来进行进一步处理。
#### 使用Lambda表达式和Stream API进行复杂查询
假设有一个实体类`User`及其对应的Mapper接口`UserMapper`,可以通过如下方式获取用户列表并过滤特定条件的数据:
```java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.List;
import java.util.stream.Collectors;
public List<User> getUsersByCondition(String namePart) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", namePart);
return userMapper.selectList(queryWrapper).stream()
.filter(user -> "active".equals(user.getStatus()))
.collect(Collectors.toList());
}
```
这段代码首先定义了一个基于部分匹配用户名的查询条件[^1],接着调用了`selectList()`方法执行SQL语句返回符合条件的所有记录组成的集合对象;最后借助于Stream API中的`.stream()`, `.filter()`, 和`.collect()`等函数完成对原始数据集更灵活的操作——这里只保留状态为"active"的用户条目。
#### 实现分页查询的同时应用Stream API
当面对大量数据时,通常会采用分页的方式来减少一次性加载的压力。下面展示的是如何在保持高效性的前提下运用Streams特性:
```java
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
@Service
public class UserService {
public Page<UserDTO> getUserPage(int pageNum, int pageSize){
// 创建分页参数实例
Page<User> pageParam = new Page<>(pageNum, pageSize);
// 执行带分页插件的方法
IPage<User> resultPage = userMapper.selectPage(pageParam, null);
// 转换成自定义传输对象,并使用Stream API做额外处理
List<UserDTO> dtoList = resultPage.getRecords().stream()
.map(User::convertToDto)
.peek(dto-> System.out.println("Processing DTO: "+dto))
.collect(Collectors.toList());
return new Page<>(resultPage.getCurrent(), resultPage.getSize(), resultPage.getTotal()).setRecords(dtoList);
}
}
```
此片段展示了怎样把来自数据库的结果映射至业务逻辑层所需的DTO (Data Transfer Object),同时利用中间操作如`.map()`和终端操作如`.collect()`增强可读性和维护性。
阅读全文
相关推荐
















