Java 框架 Mybatis 插件開發(fā)指南,超詳細(xì)!
逆鋒起筆關(guān)注后回復(fù)編程pdf
來源:https://www.cnblogs.com/chenpi/p/10498921.html
作者:風(fēng)一樣的碼農(nóng)
背景
Mybatis插件典型適用場景
分頁功能
公共字段統(tǒng)一賦值
性能監(jiān)控
其它
Mybatis插件介紹
什么是Mybatis插件
支持?jǐn)r截的方法
執(zhí)行器Executor(update、query、commit、rollback等方法);
參數(shù)處理器ParameterHandler(getParameterObject、setParameters方法);
結(jié)果集處理器ResultSetHandler(handleResultSets、handleOutputParameters等方法);
SQL語法構(gòu)建器StatementHandler(prepare、parameterize、batch、update、query等方法);
攔截階段
讀取mybatis的xml配置文件信息
通過SqlSessionFactoryBuilder創(chuàng)建SqlSessionFactory對象
通過SqlSessionFactory獲取SqlSession對象
執(zhí)行SqlSession對象的selectList方法,查詢結(jié)果
關(guān)閉SqlSession
Mybatis插件實(shí)現(xiàn)機(jī)制
插件配置信息的加載
根據(jù)解析到的類信息創(chuàng)建Interceptor對象;
調(diào)用setProperties方法設(shè)置屬性變量;
添加到Configuration的interceptorChain攔截器鏈中;
代理對象的生成
攔截邏輯的執(zhí)行
Mybatis插件開發(fā)例子
intercept:在此實(shí)現(xiàn)自己的攔截邏輯,可從Invocation參數(shù)中拿到執(zhí)行方法的對象,方法,方法參數(shù),從而實(shí)現(xiàn)各種業(yè)務(wù)邏輯, 如下代碼所示,從invocation中獲取的statementHandler對象即為被代理對象,基于該對象,我們獲取到了執(zhí)行的原始SQL語句,以及prepare方法上的分頁參數(shù),并更改SQL語句為新的分頁語句,最后調(diào)用invocation.proceed()返回結(jié)果。
plugin:生成代理對象;
setProperties:設(shè)置一些屬性變量;
小結(jié)
設(shè)計(jì)模式:代理模式、責(zé)任鏈模式;
軟件思想:AOP編程思想,降低模塊間的耦合度,使業(yè)務(wù)模塊更加獨(dú)立;
不要定義過多的插件,代理嵌套過多,執(zhí)行方法的時候,比較耗性能;
攔截器實(shí)現(xiàn)類的intercept方法里最后不要忘了執(zhí)行invocation.proceed()方法,否則多個攔截器情況下,執(zhí)行鏈條會斷掉;
逆鋒起筆是一個專注于程序員圈子的技術(shù)平臺,你可以收獲最新技術(shù)動態(tài)、最新內(nèi)測資格、BAT等大廠大佬的經(jīng)驗(yàn)、增長自身、學(xué)習(xí)資料、職業(yè)路線、賺錢思維,微信搜索逆鋒起筆關(guān)注!MyBatis 的執(zhí)行流程,寫得太好了!
關(guān)于 MyBatis 我總結(jié)了 10 種通用的寫法
項(xiàng)目實(shí)戰(zhàn) Spring Boot視頻教程 微服務(wù)整合Mybatis
