這期內(nèi)容當中小編將會給大家?guī)碛嘘Pmybatis中如何使用plugin插件,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供盤龍網(wǎng)站建設、盤龍做網(wǎng)站、盤龍網(wǎng)站設計、盤龍網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、盤龍企業(yè)網(wǎng)站模板建站服務,十余年盤龍做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。
mybatis源碼寫的極好,mybatis屬于相對輕量級的orm框架,包含的功能并沒有太多,較容易感受它的設計之美,所以用博客的方式進行記錄;
mybatis插件在四處有使用到:
對sql入?yún)?prameterHandler進行插件化處理
對sql出參result進行插件化處理
對stamentHandler進行插件化處理
對executor進行插件化處理;
mybatis的插件與平時所熟知的攔截器和過濾器類似,但設計并不相同,譬如:
springmvc的HandlerInterceptor接口:攔截器實現(xiàn)類功能比較單一,并不參與調(diào)用鏈的調(diào)度,比較簡單的一組接口的實現(xiàn)類;
過濾器:- 責任鏈模式,每個filter處理的時候入?yún)⒅杏衏hain對象,在執(zhí)行完filter中的before后將控制權再交回給chain,由chain進行調(diào)度下一個before;然后調(diào)用鏈如圖:
mybatis中的插件實現(xiàn)了Interceptor接口,其實現(xiàn)的方式屬于裝飾器模式;
將執(zhí)行插件的target交給插件,插件返回一個代理對象;將該代理對象傳給下一個插件,進行裝飾
引入Plugin對象,將target和插件this傳給Plugin
對target進行包裝,將插件功能包裝在代理對象中
對target進行包裝,通過cglib對target進行代理;
傳入的InvocationHandler是Plugin本身;
當調(diào)用target方法時,進入Plugin中的invoke方法;
這時才真正的對target方法有選擇性的調(diào)用攔截器;
而攔截器中的實現(xiàn)只需要關注攔截邏輯的處理,因為target中的方法調(diào)用交給Invocation對象中調(diào)用;
mybatis設計的插件,可以通過注解的方式指定某個類的某個方法進行攔截;這樣的設計方式通過注解可以無侵入式的對目標類進行代理,同時可以針對同一個類進行多次代理;非常靈活
單拿出mybatis中的插件進行表述的原因是,感覺設計的還是很有意思的;擴展性很好,同時有別于其它的攔截器和過濾器的實現(xiàn);
上述就是小編為大家分享的mybatis中如何使用plugin插件了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。