Mybatis分頁插件PageHelper的分頁原理剖析
前言
先說下大致的流程:PageHelper作為一個啟動器,那么就和其他啟動器加載一樣,先讀取spring.factories文件里面配置的類,轉成Bean加載本系統(tǒng)中
然后執(zhí)行他的前置后置處理方法,完成初始化,最后當我們執(zhí)行目標方法時,通過攔截器對目標方法進行攔截,以達到拓展的目的。
一、加載啟動器里面的Bean
1、PageHelper的spring.factories

2、里面就包含一個PageHelperAutoConfiguration類這是一個配置類,看下有哪些內容

在方法org.springframework.core.io.support.SpringFactoriesLoader#loadSpringFactories里面會去加載其他Jar下面的spring.factories文件,然后把文件下配置的類掃描添加到Map里面去。
3、那么spring是在哪里把jar包下面的spring.factories掃描進去的

其他starter的spring.factories加載也是如此
4、加載完之后需要把這個Bean注冊到Spring容器中
因為是一個Configuration,所以基本注冊成Bean都是在ConfigurationClassPostProcessor里面完成

最終會: org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#registerBeanDefinitionForImportedConfigurationClass 方法里面把PageHelperAutoConfiguration注冊到Spring容器中

下面看下PageHelperAutoConfiguration有什么作用
二、實例化PageHelperAutoConfiguration
該方法在實例化Bean的時候,調用BeanPostProcessorsBefore回調方法會觸發(fā)下面的方法

往sql攔截器鏈中添加攔截器
三、使用
先看下分頁查詢的代碼


其中有個setLocalPage,就是利用ThreadLocal,設置變量值
public abstract class PageMethod {
protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();
protected static boolean DEFAULT_COUNT = true;
/**
* 設置 Page 參數
*
* @param page
*/
protected static void setLocalPage(Page page) {
LOCAL_PAGE.set(page);
}
}最終在執(zhí)行sql查詢的時候,會觸發(fā)到攔截器

看下這個攔截器做了什么?

主要是判斷是否需要分頁,是否需要count操作,等等,最后返回List
到此這篇關于Mybatis分頁插件PageHelper的分頁原理剖析的文章就介紹到這了,更多相關PageHelper的分頁原理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mybatis中使用InsertProvider注解報錯解決全過程
這篇文章主要介紹了mybatis中使用InsertProvider注解報錯解決全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Spring集成MyBatis?及Aop分頁的實現(xiàn)代碼
這篇文章主要介紹了Spring集成MyBatis?及Aop分頁的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
IDEA整合Dubbo+Zookeeper+SpringBoot實現(xiàn)
初學者,想自己動手做一個簡單的demo,本文主要介紹了IDEA整合Dubbo+Zookeeper+SpringBoot實現(xiàn),需要的朋友們下面隨著小編來一起學習學習吧2021-06-06
詳解SpringBoot項目整合Vue做一個完整的用戶注冊功能
本文主要介紹了SpringBoot項目整合Vue做一個完整的用戶注冊功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07
解決@PostConstruct注解導致的程序無法啟動(@PostConstruct的執(zhí)行)
這篇文章主要介紹了解決@PostConstruct注解導致的程序無法啟動(@PostConstruct的執(zhí)行)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01

