[特殊字符] 【踩坑记录】没调 startPage(),SQL 却被自动分页了?

🚀 【踩坑记录】没调 startPage(),SQL 却被自动分页了?

1. 现象

Controller 中没写 PageHelper.startPage(),但执行 SQL 时末尾自动出现了 LIMIT,导致查询结果数量不对。

2. 核心原因:ThreadLocal 污染

PageHelper 的分页参数存放在 ThreadLocal 中。

  • 脏数据来源 :如果前一个请求调用了 startPage()没有执行查询 (由于异常或 if 逻辑提前返回),分页参数会残留在线程中。
  • 线程池复用:Tomcat 线程池会复用线程。下一个请求(即你的接口)碰巧使用了这个"脏线程",PageHelper 拦截器就会自动读取残余参数并触发分页。
3. 诱因:参数自动匹配 (supportMethodsArguments)

检查配置文件:pagehelper.supportMethodsArguments: true

如果开启此项,PageHelper 会自动反射扫描你的请求对象。只要你的公共类里有 pageNumpageSize 字段且不为空,它就会自动开启分页,无需手动调用。

4. 解决方案
  • 规范化 :确保 startPage() 后紧跟查询,或在 finally 块执行 PageHelper.clearPage()

  • 改配置 :建议将 support-methods-arguments 设为 false,由代码显式控制分页,减少"黑盒"行为。

    yml 复制代码
    pagehelper:
      support-methods-arguments: false
  • 强力清空 :在不需要分页的接口开头手动调用 PageHelper.clearPage() 以防万一。

相关推荐
倔强的石头_16 小时前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
zzzzzz3102 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
倔强的石头_4 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
云技纵横4 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
冬奇Lab4 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence5 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神5 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据5 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡5 天前
【MySQL数据库】数据类型与表约束
数据库·mysql