关于PageInfo的total属性得到的值等于当前页记录数

本文探讨使用PageHelper分页助手时遇到的total属性显示异常问题,原本用于获取总记录数的total属性却显示为当前页数量。文章分析了问题原因,指出在使用lambda的stream()处理数据后,会导致分页信息丢失。提供了解决方案,即先获取分页信息再处理数据,或避免使用lambda。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

使用PageHelper分页助手,以往总记录数通过pageInfo.getTotal()获取都没有问题。这次做了个商品列表分页,发现total等于当前页的数量,相当于size了。而后台SQL确实查询出了所有的数据。

原因:

爬了几篇文后,总结一下。
total属性确实是总记录数,并不是有些文章里说的当前页数。
其实解答还是在Github作者的Issues中:
https://github.com/pagehelper/pagehelper-spring-boot/issues/21

针对我个人问题的原因就是作者最后说的这一句,别的可能存在的原因可以去看完整的issues里的讨论。
在这里插入图片描述
因为我在查询后又使用了lambda的stream()对数据进行了处理。
作者说lambda处理过后的流会丢失分页信息,所以导致数据只显示了默认的当前页的数量。

解决:

我个人问题的解决方案就是,我在查询到数据后(吓得我赶紧)使用PageInfo先得到分页信息对象,再对我的数据进行处理。最后再返回total和处理过后的数据,就能正常显示了。。或者也可以不用lambda(我拒绝)。

(原来的total等于默认的size)
在这里插入图片描述

### 封装 PageInfo 类 为了更好地理解 `PageInfo` 的封装过程,下面提供了一个详细的实现方式。此实现基于分页需求,旨在展示如何创建并初始化 `PageInfo` 对象。 #### 创建 PageInfo 类 首先定义 `PageInfo<T>` 泛型类来支持不同类型的列表数据: ```java import java.util.List; public class PageInfo<T> { private List<T> list; private int pageNum; private int pageSize; private long total; private int pages; private boolean hasNextPage; private boolean hasPreviousPage; // 构造函数 public PageInfo() {} public PageInfo(List<T> list) { this(list, 8); } public PageInfo(List<T> list, int navigatePages) { this.list = list; // 假设已经实现了计算记录数的方法 setTotal(calculateTotal()); setPageNum(1); // 默认第一页 setPageSize(navigatePages); calculatePageProperties(); } // 计算条目数量 (模拟数据库查询) private long calculateTotal(){ // 这里应该调用实际的数据访问逻辑以获得真实的数 return 100L; // 示例返回固定 } // 设置其他属性如是否有下一页/上一页等 private void calculatePageProperties(){ if(this.total % this.pageSize == 0){ this.pages = (int)(this.total / this.pageSize); }else{ this.pages = (int)((this.total / this.pageSize)+1); } this.hasNextPage = this.pageNum < this.pages; this.hasPreviousPage = this.pageNum > 1; } // Getter 和 Setter 方法省略... } ``` 上述代码展示了 `PageInfo` 类的核心结构及其构造方法[^1]。当实例化该对象时,可以通过传入不同的参数来自定义每页显示的数量以及当前页码等内容。 对于前端交互部分,则可以直接通过 `.list` 属性获取到经过分页处理后的书籍信息集合。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值