当前位置: 首页 > news >正文

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(不修正非法参数)

  1. pageNum <= 0 → 修正为 pageNum = 1
  2. pageNum > totalPages → 修正为 pageNum = totalPages

​适用场景

  1. 防止前端传递错误页码导致空数据集
  2. 提升用户体验,自动修正无效参数

pageSizeZero

作用
​定义:当设置为 true 时,允许 pageSize=0,此时分页插件会执行 COUNT 查询但 ​返回所有数据。
​默认值:false(禁止 pageSize=0)
​适用场景

  1. 前端需要获取 ​全量数据同时得到总记录数
  2. 特殊业务场景下需要兼容 pageSize=0 的请求

相关文章:

  • list的模拟实现
  • P2P 下载科普:原理与应用
  • 三数之和_算法
  • 期权学习与期权异动
  • iOS 使用消息转发机制实现多代理功能
  • 如何将Vue项目部署至 nginx
  • Trae智能协作AI编程工具IDE:如何在MacBook Pro下载、安装和配置使用Trae?
  • DeepSeek 与大数据治理:AI 赋能数据管理的未来
  • W3C标准和ES规范之一文通
  • FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级
  • SpringBoot 端口配置
  • nlp第七节——文本匹配任务
  • 下载 MindSpore 配置 PyTorch环境
  • 使用消息队列怎样防止消息重复?
  • 苹果廉价机型 iPhone 16e 影像系统深度解析
  • Rust ~ Dyn Error
  • C语言:质因数分解
  • SpringCloud基础学习
  • C++11特性(笔记二lambda,function)
  • 《解锁万相2.1大模型:开启视频创作新世界》:此文为AI自动生成
  • 公示资费套餐、规范营销行为,今年信息通信行业将办好这十件实事
  • 下辖各区密集“联手”,南京在下一盘什么样的棋?
  • 女生“生理期请病假要脱裤子证明”?高校回应:视频经处理后有失真等问题
  • 李伟任山东省委常委、省纪委书记
  • 媒体:中国女排前队长朱婷妹妹被保送浙大受质疑,多方回应
  • 外企聊营商|武田制药:知识产权保护助创新药研发