目录
1.1、错误描述
1.2、解决方案
1.1、错误描述
周一在工作中,写了一个列表分页的接口,其中使用的是PageHelper分页依赖,原本想着挺简单的,也就是使用PageHelper.startPage(pageNum, pageSize);方法就可以了,代码写完了之后,前端联调发现一个问题:每次获取到的记录总数total总是查询出来的记录数量,而不是数据库中的总记录数量。举个例子:
前端传递pageNum=2,pageSize=10,本次查出结果是7条记录,那么接口返回的total也是7条,但是实际上,数据库中的总记录是17条。
发现这个问题之后,我就跟着我的代码排查了一下,最开始的代码大概如下所示:
看了代码发现这样写好像也没啥问题,没看出什么结果,就百度了一圈,发现还是没解决问题,百度给出的答案大部分都是下面这种:
- 是否正确使用分页插件。
- 是否自定义了RowBound对象。
- 未正确关闭 PageHelper 的分页上下文。
上面的几种情况都不是我遇见的,我又仔细想了下,突然看到我代码里面通过mapper查询出来的List结果集,和我返回给前端的List结果集是两个不同的,按照PageHelper分页的原理,它缓存的是第一次SQL查询的结果集,而如果后面对第一次查出的结果集有二次处理,那么PageHelper就无法获取到实际的total数量。
既然问题找到了,那就是要如何解决啦???下面看下如何解决这个问题。
1.2、解决方案
最终的解决方案,就是通过获取到PageInfo对象,然后手动的将total总记录数量设置到要返回的数据里面。
到此,使用PageHelper分页插件,发现获取到的total总记录数量不对,无法获取到正确的total数量的问题就解决啦。