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

Java中PageHelper的拦截器实现机制

注意:Mapper中的select语句一定不能加分号,否则会报语法错误!!!!

PageHelper的核心是基于MyBatis实现分页,相当于一个“拦截器”,通过动态篡改SQL语句、拦截执行流程完成分页逻辑注入,核心机制可概括为以下3步:

1. 拦截器注册与触发时机

PageHelper通过 @Intercepts 注解声明拦截目标:聚焦MyBatis的 StatementHandler 接口,拦截其 prepare 方法。

启动时通过Spring配置或自动装配,将拦截器注册到MyBatis的 InterceptorChain ,执行SQL前会触发拦截逻辑。

2. 分页参数传递与SQL篡改

需先通过 PageHelper.startPage(pageNum, pageSize) 设置分页参数,该方法会将参数存入 ThreadLocal 。

拦截 prepare 方法时,拦截器从 ThreadLocal 中获取分页参数,若存在则:

1. 解析原始SQL

2. 拼接分页语法(MySQL用 limit ,Oracle用 rownum ),生成分页SQL(如 select * from user limit 0,10 );

3. 替换 StatementHandler 中的原始SQL,确保执行分页查询。

3. 总条数查询与结果封装

若开启 count 查询(默认开启),拦截器会生成总条数SQL(如 select count(*) from user ),单独执行获取总记录数。

执行分页SQL后,将查询结果与总条数封装为 Page 对象(继承 ArrayList ),包含页码、页大小、总条数、总页数等信息,最后清除 ThreadLocal 中的参数。

核心关键点

拦截器注解: @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) 是拦截核心配置。

http://www.cnnetsun.cn/news/118967.html

相关文章:

  • 为什么EmotiVoice成为开发者最青睐的开源TTS引擎?
  • 18、量子测量、信息增益与量子信息理论的哲学思考
  • 26、量子计算、力学与密码学深度解析
  • Nginx gzip压缩完整配置指南:如何快速提升网站性能
  • [深度学习] 大模型学习5-高效微调框架Unsloth使用指北
  • WIndows安装MongoDB数据库
  • NiceGUI之Button操作(ElementPlus组件库)
  • Claude code学习笔记(一)-环境安装claude code+ccr
  • WordPress中文完全教程:从菜鸟到神人的终极指南
  • EmotiVoice语音合成引擎的更新日志与版本迭代规划
  • 纪念日回忆录语音生成:温情科技应用
  • Flutter富文本渲染性能优化终极指南:长文本处理与资源回收策略
  • Ditto剪贴板管理器架构深度解析:从用户痛点到技术实现
  • Qwen3-4B终极指南:如何快速上手新一代AI语言模型
  • 5 款 AI 写论文哪个好?深度横评后,才发现虎贲等考 AI 是学术圈隐藏的 “六边形战士”!
  • EmotiVoice vs 传统TTS:情感表达能力的代际差异分析
  • POV-Ray 光线追踪终极指南:从零开始掌握专业渲染
  • EmotiVoice支持语音情感风格迁移学习
  • 定期第三方安全审计:EmotiVoice质量保证
  • 不同职业人群对EmotiVoice的应用需求分析
  • 手机系统预装应用包彻底删除
  • EmotiVoice能否实现多人对话同步生成?技术可行性评估
  • FusionCompute 8.0 实验环境搭建:完整资源获取与部署指南
  • AI主播直播间搭建:EmotiVoice语音部分实现
  • 静态代码扫描服务 100分(python、java、c++、js、c
  • Directus周起始日难题:3步从周日切换到周一的技术解决方案
  • 33、网络管理与UUCP使用指南
  • C++核心语法复盘:数据结构编程的底层基石
  • 43、Exim邮件服务器配置与管理全解析
  • 48、互联网新闻服务器INN与NNTP的使用与配置指南