若依框架---PageHelper分页(十一)

文章介绍了PageHelper分页插件的实现原理,重点讨论了MySqlDialect.getPageSql方法在修改SQL语句中的作用。作者提到PageHelper通过拦截Mybatis的Executor查询方法来实现分页,并概述了项目中的拦截器、接口、异常处理类和其他关键类的职责。此外,文章还提及了AOP概念和Jfinal框架中的拦截器使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

👏作者简介:大家好,我是小童,Java开发工程师,优快云博客博主,Java领域新星创作者
📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人
 

  

我们终于发现了PageHelper中执行修改SQL语句的方法:MySqlDialect.getPageSql

通过这几天的文章,我们了解到了PageHelper是通过拦截Mybatis中的Executor来实现的。之前我们只关注PageHelper的执行细节,今天我们来看一下PageHelper的整体文件结构:

整个项目的包路径为:com.github.pagehelper中。

拦截器

包中首先是两个拦截器类:PageInterceptor 以及 QueryInterceptor。两个类的注解中均为

@Signature(type = Executor.class, method = "query"....

即并且均拦截了Mybatis中4个参数与6个参数的Executor。这一点我们从PageHelper的wiki中也能获取到。

接口

我们在包中还发现了几个接口:

Dialect:数据库方言,针对不同数据库进行实现。

AutoDialect<K>: 自动获取方言,其中<K>为缓存key类型。

BoundSqlInterceptor: BoundSql 处理器。其中还有一个内部接口:

Chain:处理器链,可以控制是否继续执行。

Constant: 常量接口。

IPage: 接口,定义了三个方法:getPageNum、getPageSize、getOrderBy。

ISelect: 分页查询接口,定义了一个方法doSelect()。

 继承自Mybatis中的类

PageRowBounds: 它继承自org.apache.ibatis.session.RowBounds,包含属性值NO_ROW_OFFSETNO_ROW_LIMIToffsetlimit等,并扩展了字段totalcount

 异常处理类:

PageException:继承自RuntimeException。

其他类:

Page:我们在代码解读中见过多次,知道是通过它来保存分页参数的,并且程序执行过程中是通过ThreadLocal<Page>线程局部变量来做局部传参,其中保存的参数有:pageNum页码, pageSize页码大小, startRow起始行, endRow末行, total总数, pages总页数, 布尔类型count表示是否包含count查询,布尔类型reasonable表示分页是否合理化,其他参数包括pageSizeZero, countColumnorderByorderByOnly,sql拦截器BoundSqlInterceptor, BoundSqlInterceptor.Chain,分页实现类dialectClass

dialectClass注释中写道

分页实现类,可以使用 {@link com.github.pagehelper.page.PageAutoDialect} 类中注册的别名,例如 "mysql", "oracle"

 等阐述到如何绑定mysql时我们再剖析来阐述。

题外话

参加工作后接触拦截器是在国产开源项目Jfinal中,其中通过interceptor,before,clear来控制接口的拦截器,当时觉得很神奇(现在也觉得蛮神奇)。

拦截器主要是通过使用反向代理或其他方式,实现控制接口中的拦截器执行方式及其顺序等。

规范名称叫AOP,面向切面编程,有时间写两篇实现拦截器的文章,一起学习!

专栏 : 若依框架 

                                                                           关注公众号,领取资料。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

童小纯

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值