👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者
📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人
我们接着昨天的文章继续阅读PageHelper的项目源码。
昨日文章中我们介绍了com.github.pagehelper.page
包中的两个类:PageParams
以及PageBoundSqlInterceptors
。了解到PageParams
可以保存分页参数,而执行SQL的拦截器可以按照指定的次序保存在PageBoundSqlInterceptors.chain
中。
并且作者在代码中使用了大量的java.util.Properties
类的接口,我们也学习到了如何使用java.util.Properties
类,以及Class.forName(xx).newInstance()
这一创建对象的方式。
通过我们测试Class.forName(xx).newInstance(),这一创建对象的方式已经是“废弃”了,即
Deprecated
,现在应该使用如下方式:
Object ob = Class.forName("xxx").getDeclaredConstructor(...).newInstance(...)
今天我们继续来看com.github.pagehelper.page
中的其他两个类:PageMethod
以及PageAutoDialect
PageMethod
PageMethod
,基础分页方法,有两个静态变量,一个是我们前面已经熟知的LOCAL_PAGE
,线程局部变量;另一个静态变量DEFAULT_COUNT
,默认值为true。
其中的方法大致可以划分为:
- LOCAL_PAGE的setter/getter/clear方法:
setLocalPage/getLocalPage/clearPage
;- 获取查询count总数的方法:
long count(select)
;- 五种参数的名为
startPage
方法;- 两种参数形式的
offsetPage
方法;- 设置参数的orderBy属性的
orderBy
方法;- 通过配置文件设置
DEFAULT_COUNT
值的setStaticProperties
方法。
看到startPage
方法我们或许会有些眼熟,没错,在Controller接口入口处执行的方法不也叫startPage
吗,通过查找若依系统源码,我们发现某个Controller中调用的startPage
方法入口均为BaseController
中的startPage方法,并在方法内部有:
PageHelper.startPage(pageNum, pageSize, orderBy).....
而PageHelper的类定义为:
public class PageHelper extends PageMethod implements Dialect, BoundSqlInterceptor.Chain {
// 此处省略类内部代码
}
即PageHelper
是PageMethod
的子类,而实际执行的startPage
方法正是PageMethod中的startPage
方法。
根据我们前面的解读,我们知道startPage
方法的重要作用就是设置Page变量,并存储在线程局部变量LOCAL_PAGE
中以便后续执行分页sql时获取。
根据PageHelper中的文档HowToUse.md
以及源码,我们了解到offsetPage
与startPage
方法作用相似。(源码显示offsetPage方法不支持设置reasonable与pageSizeZero参数)。
专栏 : 若依框架