news 2026/9/29 16:47:41

Java中PageHelper的拦截器实现机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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})}) 是拦截核心配置。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 10:01:10

EmotiVoice API接口调用指南:快速集成至现有项目

EmotiVoice API 接口调用实战:从零集成高表现力语音合成 在智能语音应用日益普及的今天,用户早已不再满足于“机器念字”式的生硬播报。无论是游戏中的角色对话、有声书的情感演绎,还是语音助手的日常交互,人们期待的是更自然、更…

作者头像 李华
网站建设 2026/9/30 2:35:28

veScale:终极PyTorch分布式训练框架完整指南

veScale:终极PyTorch分布式训练框架完整指南 【免费下载链接】veScale A PyTorch Native LLM Training Framework 项目地址: https://gitcode.com/gh_mirrors/ve/veScale veScale是一个基于PyTorch原生的大规模语言模型训练框架,专为简化分布式训…

作者头像 李华
网站建设 2026/9/29 16:05:32

数字三角形问题

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 数字三角形问题 2、输入: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 3、程序: #define _CRT_SECURE_NO_WARNINGS 1 #include <…

作者头像 李华
网站建设 2026/9/28 20:53:12

Powershell管理远程计算机(四)

信任主机配置Set-Item wsman:\localhost\client\trustedhosts "远程计算机IP或名称"完成后&#xff0c;通常需要重启 WinRM 服务以使更改生效Restart-Service WinRM在建立正式连接前&#xff0c;可以先测试远程计算机是否已准备好接受 PowerShell 远程连接Test-WSMan…

作者头像 李华
网站建设 2026/9/30 11:01:08

Kickstart文件密码设置指南:自动化安装的核心实践

引言 作为Linux OS镜像定制开发的DevOps专家和Anaconda维护者&#xff0c;我深刻理解Kickstart文件在自动化安装中的关键作用。本文将结合Red Hat官方文档及实际案例&#xff0c;系统阐述如何在Kickstart文件中安全配置用户名和密码&#xff0c;解决密文密码安装失败等常见问题…

作者头像 李华
网站建设 2026/9/28 16:56:38

EmotiVoice开源模型测评:语音自然度与情感表现力全面领先

EmotiVoice开源模型测评&#xff1a;语音自然度与情感表现力全面领先 在虚拟主播直播时突然“情绪上头”&#xff0c;用带着颤抖的嗓音说出一句充满委屈的台词&#xff1b;或是智能客服在检测到用户多次重复提问后&#xff0c;自动切换成温和安抚的语气——这些曾属于科幻场景的…

作者头像 李华