我是靠谱客的博主 开心抽屉,最近开发中收集的这篇文章主要介绍PageHelpe的total总数不正确回溯,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

PageHelper使用三步走:

  1. 设置分页参数
 PageHelper.startPage(pageNum, pageSize);
  1. SQL查询,无需做额外修改
 List<Map<String, String>> productList = mapper.getAllProduct(productName);
  1. 构建PageInfo 对象
  PageInfo pageInfo = new PageInfo<>(productList );

先调用startPage;再正常查询SQL;最后将返回的list封装成PageInfo,此时的PageInfo 对象包含的分页的相关信息,当前页、上一页、当前页数量、总数、总页数等等。

但有的人会遇到pageInfo.getTotal()的总数有误的情况,本质上是pageInfo.getTotal()跟productList.size()的区别

解析:
查看打印的日志,发现有两条查询记录,第一条是count总数的,第二条是加上分页条件的查询,而实际上SQL是没有分页条件的,这是PageHelper去拼接的SQL来查询,也就是说这时查询出的list必然小于等于pageSize。
再看下PageInfo的实现代码,其中是没有total属性的,其父类PageSerializable有total属性
PageInfo属性
在PageSerializable中,传入的是page对象,则获取其total;若是其他List类型则获取其size
PageSerializable中实现的total
其实第二步查询出来的productList是一个Page类型的,所以才能正确获得分页的总数。
若是传入new ArrayList(),则应该是未分页前的所有数据,才能在代码层面上进行分页,不然就会出现total总数有误的情况。

构建PageInfo对象

正确获取分页总数的方法:

1.若只是简单获取总数,直接从Page对象里获取就可以了

((Page) productList).getTotal();

2.构建PageInfo对象,传入 PageHelper.startPage(pageNum, pageSize);后查询出的list对象

PageInfo pageInfo = new PageInfo<>(productList);
pageInfo.getTotal();

3.利用 PageHelper.startPage的Page 对象来获取总数

Page page = PageHelper.startPage(pageNum, pageSize);
List<Map<String, String>> productList = mapper.getAllProduct(productName);
page.getTotal();

最后

以上就是开心抽屉为你收集整理的PageHelpe的total总数不正确回溯的全部内容,希望文章能够帮你解决PageHelpe的total总数不正确回溯所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部