欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis攔截器的實現(xiàn)介紹

 更新時間:2016年10月31日 11:44:49   作者:CZengze  
MyBatis提供了一種插件(plugin)的功能,雖然叫做插件,但其實這是攔截器功能。MyBatis 允許你在已映射語句執(zhí)行過程中的某一點進(jìn)行攔截調(diào)用。下面通過本文給大家介紹Mybatis攔截器知識,感興趣的朋友一起看看吧

 MyBatis介紹

MyBatis本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis 。它支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis 使用簡單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄。

MyBatis攔截器介紹

MyBatis提供了一種插件(plugin)的功能,雖然叫做插件,但其實這是攔截器功能。MyBatis 允許你在已映射語句執(zhí)行過程中的某一點進(jìn)行攔截調(diào)用。對于攔截器Mybatis為我們提供了一個Interceptor接口,通過實現(xiàn)該接口就可以定義我們自己的攔截器。

MyBatis默認(rèn)調(diào)用四種類型的方法:

1.Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)

2.ParameterHandler (getParameterObject, setParameters)

3.ResultSetHandler (handleResultSets, handleOutputParameters)

4.StatementHandler (prepare, parameterize, batch, update, query)

以上4個都是Configuration的方法,這些方法在MyBatis的一個操作(新增,刪除,修改,查詢)中都會被執(zhí)行到,執(zhí)行的先后順序是Executor,ParameterHandler,ResultSetHandler,StatementHandler。

接口的定義是:

這三個方法中,plugin用于處理器的構(gòu)建,intercept用于處理代理類,setProperties用語攔截器屬性設(shè)置。
Plugin類實現(xiàn)了InvocationHandler的接口,返回了一個JDK自身的動態(tài)動態(tài)代理類,對于plugin的wrap方法:

判斷當(dāng)前目標(biāo)對象是否有實現(xiàn)對應(yīng)需要攔截的接口,如果沒有則返回目標(biāo)對象本身,如果有則返回一個代理對象。

代理對象的InvocationHandler正是一個Plugin,當(dāng)目標(biāo)對象執(zhí)行接口方法時,如果是通過代理對象執(zhí)行的,會調(diào)用invocationHandler的invoke方法,就是Plugin的invoke方法:

如果當(dāng)前執(zhí)行的方法是定義好的需要攔截的方法,則把目標(biāo)對象、要執(zhí)行的方法以及方法參數(shù)封裝成一個Invocation對象,再把封裝好的Invocation作為參數(shù)傳遞給當(dāng)前攔截器的intercept方法。如果不需要攔截,則直接調(diào)用當(dāng)前的方法。

對于getSignatureMap方法

getSignatureMap是首先會拿到攔截器這個Intercept注解,遍歷拿到type屬性,然后根據(jù)這個type得到帶有method屬性和args屬性的method,最終返回一個type為key,value為Set<Method>的Map。例對Executor.class的update方法進(jìn)行過濾,會產(chǎn)生key為Executro,value為Method實例,里面帶有MappedStatement和method方法對應(yīng)的參數(shù)。

攔截器的可配置性:

相關(guān)文章

  • Mybatis動態(tài)SQL foreach標(biāo)簽用法實例

    Mybatis動態(tài)SQL foreach標(biāo)簽用法實例

    這篇文章主要介紹了Mybatis動態(tài)SQL foreach標(biāo)簽用法實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • spring boot過濾器FilterRegistrationBean實現(xiàn)方式

    spring boot過濾器FilterRegistrationBean實現(xiàn)方式

    這篇文章主要介紹了spring boot過濾器FilterRegistrationBean實現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • java設(shè)計模式--橋接模式詳解

    java設(shè)計模式--橋接模式詳解

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計模式之橋接模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-07-07
  • java 中String和StringBuffer與StringBuilder的區(qū)別及使用方法

    java 中String和StringBuffer與StringBuilder的區(qū)別及使用方法

    這篇文章主要介紹了java 中String和StringBuffer與StringBuilder的區(qū)別及使用方法的相關(guān)資料,在開發(fā)過程中經(jīng)常會用到String 這個類進(jìn)行操作,需要的朋友可以參考下
    2017-08-08
  • MyBatisPlus分頁時排序的實現(xiàn)

    MyBatisPlus分頁時排序的實現(xiàn)

    本文主要介紹了MyBatisPlus分頁時排序的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Spring?Security如何實現(xiàn)升級密碼加密方式詳解

    Spring?Security如何實現(xiàn)升級密碼加密方式詳解

    這篇文章主要為大家介紹了Spring?Security實現(xiàn)升級密碼加密方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Java Graphics實現(xiàn)界面顯示文字并換行

    Java Graphics實現(xiàn)界面顯示文字并換行

    Java中Graphics類提供了一些基本的幾何圖形繪制方法,本文將利用Graphics實現(xiàn)界面顯示文字并換行效果,感興趣的小伙伴可以動手嘗試一下
    2022-08-08
  • java實現(xiàn)圖的鄰接表存儲結(jié)構(gòu)的兩種方式及實例應(yīng)用詳解

    java實現(xiàn)圖的鄰接表存儲結(jié)構(gòu)的兩種方式及實例應(yīng)用詳解

    這篇文章主要介紹了java實現(xiàn)圖的鄰接表存儲結(jié)構(gòu)的兩種方式及實例應(yīng)用詳解,鄰接表構(gòu)建圖是必須需要一個Graph對象,也就是圖對象!該對象包含屬性有:頂點數(shù)、邊數(shù)以及圖的頂點集合,需要的朋友可以參考下
    2019-06-06
  • Java線程的三種創(chuàng)建方式

    Java線程的三種創(chuàng)建方式

    這篇文章主要給大家分享的是ava線程的三種創(chuàng)建方式,Thread、Runnable和Thread、Runnable和Thread,想了解具體方式的小伙伴可以參考下面文章內(nèi)容,希望對你有所幫助
    2021-11-11
  • Spring BeanFactory和FactoryBean區(qū)別解析

    Spring BeanFactory和FactoryBean區(qū)別解析

    這篇文章主要介紹了Spring BeanFactory和FactoryBean區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03

最新評論