[特殊字符] 【踩坑记录】没调 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() 以防万一。

相关推荐
白远山23 分钟前
货运跑腿搬家平台开发实战:从需求分析到落地部署指南
数据库·数据挖掘·需求分析
geovindu35 分钟前
sql: Data Modeling Patterns
数据库·sql·设计模式·sqlserver
上海蓝色星球42 分钟前
蓝色星球NG-AIOS新型AI工业操作系统重磅发布——以本体智能为内核,重构“AI+制造“新范式
大数据·数据库·人工智能·机器人
瀚高PG实验室1 小时前
瀚高数据库如何克隆表
数据库·sql·postgresql·瀚高数据库
雨辰AI1 小时前
信创多租户项目 9 大踩坑|数据隔离失效、权限越权终极解决(金仓 / 达梦 / 高斯全库适配)
java·大数据·数据库·后端
严同学正在努力1 小时前
认识 SQL Server 的 T-SQL 语法
数据库·人工智能·ai·oracle·dba
EatFan1 小时前
我为什么把患者与病例从 1:1 改成 1:N?一次真实数据库模型重构记录
数据库·后端·重构·健康医疗·全栈
xujuzheng2 小时前
2026深圳小程序/App/AI智能体开发公司选型指南(附本地服务商盘点)
数据库·科技·微信小程序·小程序·uni-app
bksczm2 小时前
MySQL基础篇之表的增删查改(CRUD)细则
sql·mysql
不剪发的Tony老师2 小时前
DuckDB教程:常用文本函数
数据库·sql·数据分析·duckdb