当前位置: 首页 > 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 的请求
http://www.lryc.cn/news/544065.html

相关文章:

  • Redis 数据结构和使用详解(带示例)
  • 深度解读 Chinese CLIP 论文:开启中文视觉对比语言预训练
  • SpringBoot 2 后端通用开发模板搭建(异常处理,请求响应)
  • 【Oracle专栏】sqlplus显示设置+脚本常用显示命令
  • DeepSeek 助力 Vue3 开发:打造丝滑的页眉(Header)
  • JVM线程分析详解
  • 【备赛】点亮LED
  • 【音视频】编解码相关概念总结
  • Python爬虫(四)- Selenium 安装与使用教程
  • Node.js项目启动流程以及各个模块执行顺序详解
  • 各种类型网络安全竞赛有哪些 网络安全大赛的简称
  • 浅谈人工智能与深度学习的应用案例研究
  • vue2版本elementUI的table分页实现多选逻辑
  • AI数字人技术源码开发分享:革新短视频营销策略
  • 实验环境搭建集锦(docker linux ros2+强化学习环境+linux上单片机串口调试)
  • sql调优之数据库开发规范
  • 《Effective Objective-C》阅读笔记(上)
  • ClkLog里程碑:荣获2024上海开源技术应用创新竞赛三等奖
  • 【数据结构进阶】哈希表
  • STM32内存五区及堆栈空间大小设置(启动文件浅析)
  • 微信小程序调用火山方舟(字节跳动火山引擎)中的DeepSeek大模型
  • (八)Java-Collection
  • 从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯
  • C++ | 哈希表
  • leetcode_动态规划/递归 70. 爬楼梯
  • 基于Rook的Ceph云原生存储部署与实践指南(上)
  • C++ Qt常见面试题(4):Qt事件过滤器
  • regionserver实例僵住问题分析
  • 服务器离线部署DeepSeek
  • QT mac系统下qml实现的菜单栏,标准快捷键Delete无作用或失灵的处理