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

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

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

 MyBatis介紹

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

MyBatis攔截器介紹

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

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

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個(gè)都是Configuration的方法,這些方法在MyBatis的一個(gè)操作(新增,刪除,修改,查詢)中都會(huì)被執(zhí)行到,執(zhí)行的先后順序是Executor,ParameterHandler,ResultSetHandler,StatementHandler。

接口的定義是:

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

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

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

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

對(duì)于getSignatureMap方法

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

攔截器的可配置性:

相關(guān)文章

  • 一篇文章帶你入門(mén)java運(yùn)算符

    一篇文章帶你入門(mén)java運(yùn)算符

    這篇文章主要介紹了Java基本數(shù)據(jù)類(lèi)型和運(yùn)算符,結(jié)合實(shí)例形式詳細(xì)分析了java基本數(shù)據(jù)類(lèi)型、數(shù)據(jù)類(lèi)型轉(zhuǎn)換、算術(shù)運(yùn)算符、邏輯運(yùn)算符等相關(guān)原理與操作技巧,需要的朋友可以參考下
    2021-08-08
  • Java策略模式的簡(jiǎn)單應(yīng)用實(shí)現(xiàn)方法

    Java策略模式的簡(jiǎn)單應(yīng)用實(shí)現(xiàn)方法

    這篇文章主要介紹了Java策略模式的簡(jiǎn)單應(yīng)用實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • springboot + rabbitmq 如何實(shí)現(xiàn)消息確認(rèn)機(jī)制(踩坑經(jīng)驗(yàn))

    springboot + rabbitmq 如何實(shí)現(xiàn)消息確認(rèn)機(jī)制(踩坑經(jīng)驗(yàn))

    這篇文章主要介紹了springboot + rabbitmq 如何實(shí)現(xiàn)消息確認(rèn)機(jī)制,本文給大家分享小編實(shí)際開(kāi)發(fā)中的一點(diǎn)踩坑經(jīng)驗(yàn),內(nèi)容簡(jiǎn)單易懂,需要的朋友可以參考下
    2020-07-07
  • SpringBoot讀取外部的配置文件的代碼實(shí)現(xiàn)

    SpringBoot讀取外部的配置文件的代碼實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot讀取外部的配置文件的代碼實(shí)現(xiàn),文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-11-11
  • 將項(xiàng)目上傳到Maven中央倉(cāng)庫(kù)(2023最新版)

    將項(xiàng)目上傳到Maven中央倉(cāng)庫(kù)(2023最新版)

    本文主要介紹了將項(xiàng)目上傳到Maven中央倉(cāng)庫(kù)(2023最新版),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 詳細(xì)分析JVM類(lèi)加載機(jī)制

    詳細(xì)分析JVM類(lèi)加載機(jī)制

    JVM將class文件字節(jié)碼文件加載到內(nèi)存中,?并將這些靜態(tài)數(shù)據(jù)轉(zhuǎn)換成方法區(qū)中的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu),在堆(并不一定在堆中,HotSpot在方法區(qū)中)中生成一個(gè)代表這個(gè)類(lèi)的java.lang.Class?對(duì)象,作為方法區(qū)類(lèi)數(shù)據(jù)的訪問(wèn)入口,接下來(lái)將詳細(xì)講解JVM類(lèi)加載機(jī)制
    2022-04-04
  • java實(shí)現(xiàn)二維碼生成功能詳細(xì)示例

    java實(shí)現(xiàn)二維碼生成功能詳細(xì)示例

    這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)二維碼生成功能的相關(guān)資料,隨著信息化時(shí)代的到來(lái),二維碼作為一種信息傳遞的工具,越來(lái)越受到人們的歡迎,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Logback配置文件這么寫(xiě),還說(shuō)你不會(huì)整理日志?

    Logback配置文件這么寫(xiě),還說(shuō)你不會(huì)整理日志?

    logback框架會(huì)默認(rèn)加載classpath下命名為logback-spring.xml或logback.xml的配置文件。這篇文章主要介紹了Logback配置文件寫(xiě)法,需要的朋友可以參考下
    2020-07-07
  • Java自然排序Comparable使用方法解析

    Java自然排序Comparable使用方法解析

    這篇文章主要介紹了Java自然排序Comparable使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • JAVA十大排序算法之冒泡排序詳解

    JAVA十大排序算法之冒泡排序詳解

    這篇文章主要介紹了java中的冒泡排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

定安县| 基隆市| 阿拉善盟| 克什克腾旗| 金沙县| 呼图壁县| 普洱| 喀喇| 手游| 高要市| 乌兰浩特市| 尉氏县| 吉木乃县| 登封市| 饶阳县| 方城县| 文化| 内黄县| 怀安县| 陕西省| 通州区| 扎鲁特旗| 樟树市| 普安县| 米泉市| 镶黄旗| 呼伦贝尔市| 怀柔区| 乌恰县| 林口县| 阿拉善右旗| 宁晋县| 乌拉特中旗| 田阳县| 哈尔滨市| 桑日县| 越西县| 滁州市| 镶黄旗| 祁东县| 页游|