最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis 插件原理解析

 更新時間:2021年10月12日 14:42:06   作者:一葉知秋_dba  
mybatis是一款優(yōu)秀的ORM開源框架,這個框架具有極強(qiáng)的靈活性,本文再次給大家介紹Mybatis 插件原理,感興趣的朋友一起看看吧

Mybati s作為⼀個應(yīng)⽤⼴泛的優(yōu)秀的ORM開源框架,這個框架具有強(qiáng)⼤的靈活性,在四⼤組件
(Executor、StatementHandler、ParameterHandler、ResultSetHandler)處提供了簡單易⽤的插 件擴(kuò)展機(jī)制。
Mybatis對持久層的操作就是借助于四⼤核⼼對象。MyBatis⽀持⽤插件對四⼤核⼼對象進(jìn) ⾏攔截,對mybatis來說
插件就是攔截器,⽤來增強(qiáng)核⼼對象的功能,增強(qiáng)功能本質(zhì)上是借助于底層的 動態(tài)代理實現(xiàn)的,換句話說,
MyBatis中的四⼤對象都是代理對象

在這里插入圖片描述

MyBatis所允許攔截的⽅法如下:

  • 執(zhí)⾏器Executor (update、query、commit、rollback等⽅法);
  • SQL語法構(gòu)建器StatementHandler (prepare、parameterize、batch、updates query等⽅法);
  • 參數(shù)處理器ParameterHandler (getParameterObject、setParameters⽅法);
  • 結(jié)果集處理器ResultSetHandler (handleResultSets、handleOutputParameters等⽅法);

在四⼤對象創(chuàng)建的時候

  • 每個創(chuàng)建出來的對象不是直接返回的,⽽是interceptorChain.pluginAll(parameterHandler);
  • 獲取到所有的Interceptor (攔截器)(插件需要實現(xiàn)的接⼝);調(diào)⽤ interceptor.plugin(target);返回
  • target 包 裝后的對象
  • 插件機(jī)制,我們可以使⽤插件為⽬標(biāo)對象創(chuàng)建⼀個代理對象;AOP (⾯向切⾯)我們的插件可 以為四⼤對象

創(chuàng)建出代理對象,代理對象就可以攔截到四⼤對象的每⼀個執(zhí)⾏;
自定義插件攔截:

Intercepts ({//注意看這個⼤花括號,也就這說這⾥可以定義多個@Signature對多個地⽅攔截,都⽤這個攔截器
@Signature (type = StatementHandler .class , //這是指攔截哪個接⼝
method = "prepare",//這個接⼝內(nèi)的哪個⽅法名,不要拼錯了
args = { Connection.class, Integer .class}), 這是攔截的⽅法的⼊參,按順序?qū)懙?
這,不要多也不要少,如果⽅法重載,可是要通過⽅法名和⼊參來確定唯⼀的
})
public class MyPlugin implements Interceptor {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
// //這⾥是每次執(zhí)⾏操作的時候,都會進(jìn)⾏這個攔截器的⽅法內(nèi)
Override
public Object intercept(Invocation invocation) throws Throwable {
//增強(qiáng)邏輯
System.out.println("對⽅法進(jìn)⾏了增強(qiáng)....");
return invocation.proceed(); //執(zhí)⾏原⽅法
}
/**
* //主要是為了把這個攔截器⽣成⼀個代理放到攔截器鏈中
* ^Description包裝⽬標(biāo)對象 為⽬標(biāo)對象創(chuàng)建代理對象
* @Param target為要攔截的對象
* @Return代理對象
*/
Override
public Object plugin(Object target) {
System.out.println("將要包裝的⽬標(biāo)對象:"+target);
return Plugin.wrap(target,this);
 }
/**獲取配置⽂件的屬性**/
//插件初始化的時候調(diào)⽤,也只調(diào)⽤⼀次,插件配置的屬性從這⾥設(shè)置進(jìn)來
Override
public void setProperties(Properties properties) {
System.out.println("插件配置的初始化參數(shù):"+properties );
} }

到此這篇關(guān)于Mybatis 插件原理解析的文章就介紹到這了,更多相關(guān)Mybatis 插件原理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot詳細(xì)講解斷言機(jī)制原理

    SpringBoot詳細(xì)講解斷言機(jī)制原理

    斷言Assertion是測試方法中的核心部分,用來對測試需要滿足的條件進(jìn)行驗證。這些斷言方法都是org.junit.jupiter.api.Assertions的靜態(tài)方法。檢查業(yè)務(wù)邏輯返回的數(shù)據(jù)是否合理。所有的測試運行結(jié)束以后,會有一個詳細(xì)的測試報告
    2022-06-06
  • SpringBoot從yml配置文件中讀常用參數(shù)值實例方法

    SpringBoot從yml配置文件中讀常用參數(shù)值實例方法

    在本篇文章里小編給大家整理了關(guān)于SpringBoot從yml配置文件中讀常用參數(shù)值實例方法,有需要的朋友們學(xué)習(xí)下。
    2019-12-12
  • 自定義對象作為HashMap的Key問題

    自定義對象作為HashMap的Key問題

    這篇文章主要介紹了自定義對象作為HashMap的Key問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java實現(xiàn)把文件及文件夾壓縮成zip

    Java實現(xiàn)把文件及文件夾壓縮成zip

    這篇文章主要介紹了Java實現(xiàn)把文件及文件夾壓縮成zip,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java調(diào)用groovy實現(xiàn)原理代碼實例

    Java調(diào)用groovy實現(xiàn)原理代碼實例

    這篇文章主要介紹了Java調(diào)用groovy實現(xiàn)原理代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • 使用Javacsv.jar的jar包操作csv文件的方法

    使用Javacsv.jar的jar包操作csv文件的方法

    使用javacsv的jar包很方便的可以操作csv文件。下面通過本教程給大家介紹使用javacsv.jar操作csv文件的方法,感興趣的朋友一起看下吧
    2016-08-08
  • 詳解Java排序算法中的冒泡和選擇排序

    詳解Java排序算法中的冒泡和選擇排序

    這篇文章主要給大家介紹了Java排序算法中的冒泡排序和選擇排序,文中有詳細(xì)的圖文解釋和代碼示例,對我們學(xué)習(xí)Java算法有一定的幫助,感興趣的同學(xué)可以參考閱讀下
    2023-06-06
  • java方法替換word文檔中需要替換的部分操作步驟

    java方法替換word文檔中需要替換的部分操作步驟

    這篇文章主要介紹了java方法替換word文檔中需要替換的部分操作的相關(guān)資料,需要的朋友可以參考下,包括引入依賴、創(chuàng)建業(yè)務(wù)方法、測試以及擴(kuò)展功能,需要的朋友們可以參考下
    2024-12-12
  • Mybatis分解式查詢使用方法

    Mybatis分解式查詢使用方法

    這篇文章主要介紹了Mybatis分解式查詢使用方法,分解式查詢就是將一條Sql語句拆分成多條。在 MyBatis 多表查詢中,使用連接查詢時一個 Sql 語句就可以查詢出所有的數(shù)據(jù)
    2023-04-04
  • java 根據(jù)前端返回的字段名進(jìn)行查詢數(shù)據(jù)

    java 根據(jù)前端返回的字段名進(jìn)行查詢數(shù)據(jù)

    本文介紹了如何在Java中使用SpringDataJPA實現(xiàn)動態(tài)查詢功能,以便根據(jù)前端傳遞的字段名動態(tài)構(gòu)建查詢語句,通過創(chuàng)建實體類、Repository接口、構(gòu)建動態(tài)查詢、在Service層和Controller中使用動態(tài)查詢,實現(xiàn)了前后端分離架構(gòu)中的靈活查詢需求
    2024-11-11

最新評論

张家口市| 龙胜| 嘉禾县| 株洲县| 丹凤县| 田东县| 徐汇区| 中山市| 嘉定区| 富平县| 武川县| 固始县| 五台县| 商丘市| 乌兰县| 宝清县| 双流县| 武山县| 台湾省| 皮山县| 鄂伦春自治旗| 峨边| 嵊州市| 同仁县| 汶上县| 红安县| 莫力| 东安县| 杭州市| 元朗区| 渭源县| 澄迈县| 白河县| 镇平县| 长治市| 同心县| 遂平县| 左云县| 吉林省| 蓝田县| 金秀|