浅析PageHelper踩坑:stream流导致分页失效的问题
时间:2022-04-19
本文章向大家介绍浅析PageHelper踩坑:stream流导致分页失效的问题,主要包括浅析PageHelper踩坑:stream流导致分页失效的问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天发现使用 PageHelper 进行分页时,分页失效了。查了下发现是这个原因,改了之后就正常了,记录一下。代码就不贴了,贴别人的。
1、问题场景:前端分页数据不对,始终只有 pageSize 10 条数据
2、业务代码
public ResultVo<PageInfo<StaffCardInfoVo>> findStaffCardList(@Valid StaffCardQueryDto staffCardQueryDto){
PageHelper.startPage(staffCardQueryDto.getPageCurrent(),staffCardQueryDto.getPageSize());
// 查询会员卡列表数据处理
List<StaffCardInfoVo> staffCardList = staffCardService.findStaffCardList(staffCardQueryDto);
PageInfo<StaffCardInfoVo> staffCardInfoVoPageInfo = new PageInfo<>(staffCardList);
return ResultVoUtil.success(staffCardInfoVoPageInfo);
}
3、问题处理说明
pageHelper中调用数据库查询返回的集合信息,实际上返回的是 Page 类型的集合(继承ArrayList),看 PageHelper 源码就能发现:
public class Page<E> extends ArrayList<E> implements Closeable {
private static final long serialVersionUID = 1L;
// 省略属性方法
}
对比其他分页查询接口发现会员卡查询接口中返回的会员卡列表集合的数据类型为 ArrayList,非 Page 集合。
然后看到业务实现层中查询数据库之后有使用 stream 流对集合进行处理,处理之后返回的数据类型为 ArrayList,也就是失效的原因。
public List<StaffCardInfoVo> findStaffCardList(StaffCardQueryDto staffCardQueryDto) {
// 数据库查询会员卡,此时返回的staffCardList还是page集合类型
List<StaffCardInfoVo> staffCardList = staffCardMapper.findStaffCardList(staffCardQueryDto, Integer.valueOf(manageUserService.getStudioIdByToken()));
staffCardList= staffCardList.stream().map(
staffCardInfoVo -> {
// 会员卡字段处理业务
return staffCardInfoVo;
}
).collect(Collectors.toList());
// 此处返回的会员卡数据类型为ArrayList
return staffCardList;
}
从上面源码可以看到:如果是 Page 的实例,就会分页;如果只是集合的实例,就不会分页,返回 list.size() ,所以一直返回 10 条数据。
4、处理方案
就是使用 for 循环替代 stream 遍历处理,这里仅提供思路不提供具体实现。下面是我的修改,修改之后就正常了。
原文地址:https://www.cnblogs.com/goloving/p/16164817.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ubuntu16.04自动设置行号的步骤详解
- CentOS 8安装ZABBIX4.4的指南
- Linux 3.X/4.x/5.x 忘记宝塔面板密码的解决方法
- Linux中grep和egrep命令详解
- centos8 使用yum 安装 mongodb 4.2的方法
- 在Linux环境下采用压缩包方式安装JDK 13的方法
- Linux下强制杀死进程的方法详解
- Jdk1.8的安装简易教程(Linux和windows)
- Linux中的awk数组的基本使用方法
- Linux查看分区文件系统类型的方法总结
- Linux更改账户密码实例详解
- linux epoll机制详解
- linux IPC之socket解析及实例代码
- python 舆情分析 nlp主题分析 (3) --gensim库的简单使用
- apache下面二级目录部署react/vue的方法