Spring Boot 集成 PageHelper 的分页异常排查
在 Spring Boot 项目中集成 PageHelper 进行分页查询时,偶尔会遇到一个反直觉的现象:明明数据库里只有少量数据,或者当前页码已经超过了总页数,系统却依然返回了数据。
假设数据库中有 6 条记录,设置每页显示 10 条。当我们请求第 1 页、第 2 页甚至第 3 页时,返回的结果竟然都是这 6 条数据。这通常不是 Bug,而是 PageHelper 的一个设计特性。
核心原因:合理分页参数
核心原因在于开启了'合理分页'功能。从 3.3.0 版本开始,PageHelper 提供了 reasonable 参数来控制这一行为。当该参数为 true 时,如果请求的页码小于 1,会自动跳到第一页;如果大于总页数,则自动跳转到最后一页并返回数据。反之,如果禁用合理化(即设置为 false),越界的页码则会直接返回空结果集。
解决方案
要解决这个问题,只需在配置文件中明确关闭该功能。对于 Spring Boot 项目,可以在 application.properties 中添加如下配置:
pagehelper.reasonable = false
如果是 XML 配置方式,则需添加 <property name="reasonable" value="false" />。
补充说明:支持方法参数拦截
关于 supportMethodsArguments 参数,它的作用是决定是否自动拦截请求中的 pageNum 和 pageSize 参数。启用后,可以直接在 Controller 层接收参数而无需手动调用 PageHelper.startPage() 方法;禁用后则必须显式调用该方法来指定分页信息。根据实际开发习惯选择合适的配置即可。
依赖与基础配置参考
确保项目中引入了必要的依赖,并正确配置了 MyBatis 映射路径:
<!-- pom.xml -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</>
5.1.4.1
compile

