得嘞,分页插件PageHelper返回记录总数total竟然出错了!

Tech 导读
本文围绕分页插件PageHelper在使用过程中遇到的一个问题展开讨论。作者在运用PageHelper进行数据分页时,发现返回的记录总数total出现了错误。文章首先分析了可能出现该问题的原因,接着通过实际案例详细展示了问题复现的步骤。同时,文章也提供了针对这一问题的解决方案和优化建议。阅读本文将了解到分页插件PageHelper的使用技巧,以及在实际项目中如何快速定位并解决类似问题,提高代码质量和开发效率。这对于使用分页插件的开发者来说,具有一定的参考价值和启示作用。
导读
本文围绕分页插件PageHelper在使用过程中遇到的一个问题展开讨论。作者在运用PageHelper进行数据分页时,发现返回的记录总数total出现了错误。文章首先分析了可能出现该问题的原因,接着通过实际案例详细展示了问题复现的步骤。同时,文章也提供了针对这一问题的解决方案和优化建议。阅读本文将了解到分页插件PageHelper的使用技巧,以及在实际项目中如何快速定位并解决类似问题,提高代码质量和开发效率。这对于使用分页插件的开发者来说,具有一定的参考价值和启示作用。
分页返回的记录总数total和每页数量pageSize一致,数据库统计的数量大于当前返回的总记录数total,以下是相关代码
问题分析
3.返回结果后有中间处理导致总数减少检查结果:网上有人遇到 对返回结果有类型转化导致total错误的情况, 以此类推,发现当前代码虽没有对返回结果进行类型转换但是对mapper返回的结果更换了实例对象然后将更换后的对象包装
进一步查看包装成PageInfo<T>时源码并没有关于total参数的处理,
PageInfo<T>构造方法
public class PageInfo<T> extends PageSerializable<T> {/*** 包装Page对象** @param list page结果* @param navigatePages 页码数量*/public PageInfo(List<T> list, int navigatePages) {super(list);if (list instanceof Page) {Page page = (Page) list;this.pageNum = page.getPageNum();this.pageSize = page.getPageSize();this.pages = page.getPages();this.size = page.size();//由于结果是>startRow的,所以实际的需要+1if (this.size == 0) {this.startRow = 0;this.endRow = 0;} else {this.startRow = page.getStartRow() + 1;//计算实际的endRow(最后一页的时候特殊)this.endRow = this.startRow - 1 + this.size;}} else if (list instanceof Collection) {this.pageNum = 1;this.pageSize = list.size();this.pages = this.pageSize > 0 ? 1 : 0;this.size = list.size();this.startRow = 0;this.endRow = list.size() > 0 ? list.size() - 1 : 0;}if (list instanceof Collection) {this.navigatePages = navigatePages;//计算导航页calcNavigatepageNums();//计算前后页,第一页,最后一页calcPage();//判断页面边界judgePageBoudary();}}}
public PageSerializable(List<T> list) {this.list = list;if(list instanceof Page){this.total = ((Page)list).getTotal();} else {this.total = list.size();}}
使用mapper返回的对象直接构造PageInfo对象,并在此基础上获取分页信息
更正的代码如下:
在使用 PageInfo pageInfo = new PageInfo<>(T); 构造PageInfo时直接使用mapper 返回对象,不要进行类型转换或转存等操作,以免丢失数据。
求分享
求点赞
求在看
▪功能支撑:会员成长体系、等级计算策略、权益体系、营销底层能力支持
▪用户活跃:会员关怀、用户触达、活跃活动、业务线交叉获客、拉新促