PageHelper新发现
PageHelper
- 背景
- 解决
- reasonable
- pageSizeZero
背景
今天发现了一个很有趣的现象,接手一个很老的项目springmvc项目、使用PageHelper分页实现常见的后端接口分页功能。但是发现当页码参数大于实际的页码数时、正常不应该返回数据,但是目前确一直返回数据不知道问题在哪里。
解决
随后查看了PageHelper使用方法很简单跟之前没有任何差异
PageHelper.startPage(pageInfo.getPage(), pageInfo.getRows());
接着无意间看到mybatis-config对pagehelper做了些配置
<configuration>
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql" />
<!-- 该参数默认为false -->
<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
<!-- 和startPage中的pageNum效果一样 -->
<property name="offsetAsPageNum" value="true" />
<!-- 该参数默认为false -->
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true" />
<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型) <property name="pageSizeZero" value="true"/> -->
<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
<property name="reasonable" value="true" />
</plugin>
</plugins>
</configuration>
随后发现了这个参数reasonable
不知道其含义,但是在项目当中是默认开启的状态、后面一顿搜索查询到了下面的信息才明白原由。
reasonable
作用
定义:当设置为 true 时,自动修正 非法的分页参数:
默认值
:false(不修正非法参数)
- pageNum <= 0 → 修正为 pageNum = 1
- pageNum > totalPages → 修正为 pageNum =
totalPages
适用场景
- 防止前端传递错误页码导致空数据集
- 提升用户体验,自动修正无效参数
pageSizeZero
作用
定义:当设置为 true 时,允许 pageSize=0,此时分页插件会执行 COUNT 查询但 返回所有数据。
默认值
:false(禁止 pageSize=0)
适用场景
- 前端需要获取 全量数据同时得到总记录数
- 特殊业务场景下需要兼容 pageSize=0 的请求