前言 |
近期项目中用到Mabits的PageHelper插件,在测试时发现分页失效了,特记录下此过程。
问题描述:PageHelper的分页失效 |
SpringBoot (version2.x) ,实现按照条件分页查询用户信息
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
#分页插件
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: count=countSql
#pageSize=0 返回所有
pageSizeZero: true
public BasePageResult<List<UserInfoVo>> queryUserInfoListByPage(UserInfoRequestVo parm) {
BasePageResult<List<UserInfoVo>> pageResult = new BasePageResult<>();
PageHelper.startPage(parm.getPage(), parm.getPage_size());
List<UserInfoVo> userList = userMapper.queryUserInfoByCondition(parm.getName().trim());
PageInfo<UserInfoVo> pageInfo = new PageInfo<>(userList);
……
return pageResult;
}
查询第一页,每页10条,返回的是10条记录;查询第二页,每页10条,返回的是10条记录,查询第三页,每页10条记录,返回的是10条记录;现象是无论page为多少,返回的都是10条记录,而且是一模一样的10条记录
数据说明:数据库里边符合条件的记录只有10条。
于是我觉得,我的分页插件怕是被用坏了
分页sql 只有一个分页参数: limit ?
正常情况下分页参数(pageNum !=1)limit ?,?
问题排查与分析 |
代码知道答案:
Page 初始化及执行分页查询时都会用到一个参数: reasonable, 顾名思义是 合理化,代码中也有注释说是分页合理化,这个参数的值默认为false。如下图所示:当设置了true,并且当前查询的页码 大于 总页数时,就会进行分页的合理化,会把当前查询的页码重置为总页数,也就是说查询了最后一页的pageSize 记录。
代码执行到下图中的setTotal()方法,total = 10, pages = 1, reasonable= true && 3> 1 ==> pageNum = pages =1 ,这就可以说明 当pageNum大于1时,查询结果会一直是库里边的10条记录;
reasonable 是在哪挖的坑呢?
是application.yml中有一项是 pagehelper.reasonable =true ,具体大家可以往上看[application.yml 配置] 部分。
当然了pageHelper 官网也有说明:https://github.com/pagehelper/Mybatis-PageHelper
问题解决 |
PageHelper.startPage(parm.getPage(),parm.getPage_size(),true,false,false);
参考链接 |
https://blog.csdn.net/shenchaohao12321/article/details/84201136
https://www.cnblogs.com/lykbk/p/sdsdshjkhoh345345345345345.html
总结 |
学习知识优先选择官网 ,今天七夕节,祝大家都能找到合适的人生伴侣❤️!