PageHelper分页后,对list操作会导致分页无效
小哈学Java
共 11338字,需浏览 23分钟
· 2021-05-20
点击上方蓝色“小哈学Java”,选择“设为星标” 回复“资源”获取独家整理的学习资料!
来源:blog.csdn.net/qq_35080796/article/details/105508744
1.问题
1.1.PageHelper先开启分页,后对list数据操作
@Override
public PageInfo<HdQueryVo> getRecordsByView(int pageNo, int pageSize) {
PageHelper.startPage(pageNo,pageSize);
List<HdQueryVo> hdQueryVosByView = actionMapper.getActionByView();
List<HdQueryVo> hdQueryVos = new ArrayList<>();
for (HdQueryVo hdQueryVo : hdQueryVosByView) {
HdQueryVo hdQueryVoSingle = new HdQueryVo();
hdQueryVoSingle.setHdId(hdQueryVo.getHdId());
hdQueryVoSingle.setHdType(hdQueryVo.getHdType());
hdQueryVoSingle.setHdTitle(hdQueryVo.getHdTitle());
hdQueryVoSingle.setHdStartDate(hdQueryVo.getHdStartDate());
hdQueryVoSingle.setHdEndDate(hdQueryVo.getHdEndDate());
hdQueryVoSingle.setHdStatus(hdQueryVo.getHdStatus());
hdQueryVoSingle.setHdImage(hdQueryVo.getHdImage());
hdQueryVoSingle.setHdNumber(hdQueryVo.getHdNumber());
hdQueryVoSingle.setGmtCreate(hdQueryVo.getGmtCreate());
hdQueryVoSingle.setGmtModified(hdQueryVo.getGmtModified());
hdQueryVoSingle.setUserId(hdQueryVo.getUserId());
if (hdQueryVo.getHdType().equals(0)) {
hdQueryVoSingle.setHdJoinUsers(onlineWorksMapper.getOnlineJoinUsers(hdQueryVo.getHdId()));
} else {
hdQueryVoSingle.setHdJoinUsers(offlineUsersMapper.getOfflineJoinUsers(hdQueryVo.getHdId()));
}
hdQueryVos.add(hdQueryVoSingle);
}
PageInfo<HdQueryVo> pageViewInfo = new PageInfo<>(hdQueryVos);
return pageViewInfo;
}
可以分页,但是数据量错误,total始终等于每页数据量,即pageSize
1.2.先对list数据进行操作,后开启分页
@Override
public PageInfo<HdQueryVo> getRecordsByView(int pageNo, int pageSize) {
List<HdQueryVo> hdQueryVosByView = actionMapper.getActionByView();
List<HdQueryVo> hdQueryVos = new ArrayList<>();
for (HdQueryVo hdQueryVo : hdQueryVosByView) {
HdQueryVo hdQueryVoSingle = new HdQueryVo();
hdQueryVoSingle.setHdId(hdQueryVo.getHdId());
hdQueryVoSingle.setHdType(hdQueryVo.getHdType());
hdQueryVoSingle.setHdTitle(hdQueryVo.getHdTitle());
hdQueryVoSingle.setHdStartDate(hdQueryVo.getHdStartDate());
hdQueryVoSingle.setHdEndDate(hdQueryVo.getHdEndDate());
hdQueryVoSingle.setHdStatus(hdQueryVo.getHdStatus());
hdQueryVoSingle.setHdImage(hdQueryVo.getHdImage());
hdQueryVoSingle.setHdNumber(hdQueryVo.getHdNumber());
hdQueryVoSingle.setGmtCreate(hdQueryVo.getGmtCreate());
hdQueryVoSingle.setGmtModified(hdQueryVo.getGmtModified());
hdQueryVoSingle.setUserId(hdQueryVo.getUserId());
if (hdQueryVo.getHdType().equals(0)) {
hdQueryVoSingle.setHdJoinUsers(onlineWorksMapper.getOnlineJoinUsers(hdQueryVo.getHdId()));
} else {
hdQueryVoSingle.setHdJoinUsers(offlineUsersMapper.getOfflineJoinUsers(hdQueryVo.getHdId()));
}
hdQueryVos.add(hdQueryVoSingle);
}
PageHelper.startPage(pageNo,pageSize);
PageInfo<HdQueryVo> pageViewInfo = new PageInfo<>(hdQueryVos);
return pageViewInfo;
}
数据可以查询出来,总数total也正确,但是分页功能失效。(搜索公众号Java知音,回复“2021”,送你一份Java面试题宝典)
2.原因
PageHelper中startPage开启分页方法只对后面的sql查询起作用
1.1 错误原因是提前开启分页后,对list操作,即PageInfo pageViewInfo = new PageInfo<>(hdQueryVos);
/**
* 包装Page对象
*
* @param list
*/
public PageInfo(List list) {
this(list, 8);
}
只是把list转为PageInfo对象,不影响前面分页数据的操作
1.2 错误原因是先对list操作后,开启翻页后没有sql语句
即sql语句没有参与分页查询
3.解决方案
直接对分页后的PageInfo对象中的数据进行操作
对list集合操作,先取出PageInfo里的list集合数据,再对数据进行相关操作 将操作完后的list集合再次存到PageInfo里,进行return
@Override
public PageInfo<HdQueryVo> getRecordsByView(int pageNo, int pageSize) {
PageInfo<HdQueryVo> source = PageHelper.startPage(pageNo, pageSize).doSelectPageInfo(()->{
actionMapper.getActionByView();
});
// 需要转换的对象
PageInfo<HdQueryVo> target = new PageInfo<>();
// 复制分页属性
BeanUtils.copyProperties(source, target);
// 对查询的list进行下一步操作,比如类型转换后
List<HdQueryVo> collect = source.getList().stream().collect(Collectors.toList());
List<HdQueryVo> hdQueryVos = new ArrayList<>();
for (HdQueryVo hdQueryVo : collect) {
HdQueryVo hdQueryVoSingle = new HdQueryVo();
hdQueryVoSingle.setHdId(hdQueryVo.getHdId());
hdQueryVoSingle.setHdType(hdQueryVo.getHdType());
hdQueryVoSingle.setHdTitle(hdQueryVo.getHdTitle());
hdQueryVoSingle.setHdStartDate(hdQueryVo.getHdStartDate());
hdQueryVoSingle.setHdEndDate(hdQueryVo.getHdEndDate());
hdQueryVoSingle.setHdStatus(hdQueryVo.getHdStatus());
hdQueryVoSingle.setHdImage(hdQueryVo.getHdImage());
hdQueryVoSingle.setHdNumber(hdQueryVo.getHdNumber());
hdQueryVoSingle.setGmtCreate(hdQueryVo.getGmtCreate());
hdQueryVoSingle.setGmtModified(hdQueryVo.getGmtModified());
hdQueryVoSingle.setUserId(hdQueryVo.getUserId());
if (hdQueryVo.getHdType().equals(0)) {
hdQueryVoSingle.setHdJoinUsers(onlineWorksMapper.getOnlineJoinUsers(hdQueryVo.getHdId()));
} else {
hdQueryVoSingle.setHdJoinUsers(offlineUsersMapper.getOfflineJoinUsers(hdQueryVo.getHdId()));
}
hdQueryVos.add(hdQueryVoSingle);
}
// 加工后的数据放入新的pageinfo
target.setList(hdQueryVos);
return target;
}
参考资料:
PageHelper官方文档 PageHelper分页查询结果后再对数据List操作的方法
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
评论
李彦宏:开源大模型不如闭源,后者会持续领先;周鸿祎:“开源不如闭源” 的言论是胡说八道
架构师大咖
架构师大咖,打造有价值的架构师交流平台。分享架构师干货、教程、课程、资讯。架构师大咖,每日推送。
公众号该公众号已被封禁0、李彦宏:开源大模型不如闭源,后者会持续领先当今
源码共读
0
【比特币减半后价格表现大揭秘】历史数据告诉你什么?
加密货币现状的十张图表Glassnode 和 Coinbase 发布了《加密货币市场指南》,这是一个季度系列,旨在提供对加密货币市场主要发展的详细分析。以下是报告中引起我们注意的10张图表:1.比特币主导地位从50%上升至52%通常由减半引发的山寨季会降低比特币的主导地位,使其更倾向于新的山寨币。这
区块链头条
0
某程序员吐槽:公司最近招了一批35左右的,这帮人习惯天天卷到八点多,导致现在我们也要八点才下班
架构师大咖
架构师大咖,打造有价值的架构师交流平台。分享架构师干货、教程、课程、资讯。架构师大咖,每日推送。
公众号该公众号已被封禁某位程序员的吐槽引发了广泛的思考和共鸣。他抱怨公司
源码共读
0
python读取多个excel表多个sheet后映射匹配再分组计算、纵向拼接
大家好,我是飞奔的蜗牛ing。一、前言前几天在一个客户给到一单数据处理的 问题,需求是这样的:1.表“aa2020”中2020年数据需要按季度分成四个表。(1-3月、4-6月、7-9月、10-12月)2.表“2020年一季度”代表2020年一季度客户所对应的管理档位,需要把表中的档位导入附表“aa2
IT共享之家
0
下沉市场对黄金的偏爱,停滞在金价飙升之前
狂买还是狂卖?冲击万店,汉堡界能跑出下一个蜜雪冰城吗?最近一段时间金价的暴涨,已从部分人的惊喜变成大众的惊吓。大众的讨论从升值贬值、这个时间段入手是否合适,开始变成“上次金价暴涨世界发生了什么?”的担忧。金价狂涨在互联网中已经演变为大众话题,无论准不准备囤黄金,手头有没有黄金,都或多或少关注着金价的
亿欧网
0
英伟达大跌对AI板块和罗博特科的影响
公众号改版,及时收到文章推送需要给公众号加星。大家可以点击页面上方蓝色字【京北夜光】,进入公众号首页,点右上角“...”,点下方“设为星标”。坚持复盘总结分享不容易,点右上角点个在看并分享到朋友圈,看完顺手点个点赞和在看,算是个认可,感谢。在看互动:凡是点了点赞和在看且分享本文到朋友圈的读者,进入公
IT局
10
大视频周报|全国酒店电视操作复杂专项治理动员部署电视电话会在京召开
小美播报本 期 看 点广电总局发4K超高清机顶盒技术新标准;总局公示《智能电视操作系统 第8部分:分类分级》等两项行业标准;工信部组织开展今年5G轻量化(RedCap)贯通行动;全国酒店电视操作复杂专项治理动员部署电视电话会在京召开......(今日流媒体vip可免费获取报告PDF版,详情请见文末。
流媒体网
0
腾讯开始收费,这软件的良心操作彻底没了
腾讯作为互联网巨头,也曾出品过不少良心软件,比如QQ影音就因安装包小、CPU占用少、界面简洁无广告无插件等备受用户喜爱。但因为没有合适的赚钱盈利模式,QQ影音逐渐要被腾讯放弃。腾讯文档也因其实用性,受到不少办公族用户的关注。其实对于微信用户来说,腾讯文档还有许多鲜为人知的使用技巧。比如,我们在微信里
逆锋起笔
10