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

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

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

 MyBatis介紹

MyBatis本是apache的一個開源項(xiàng)目iBatis, 2010年這個項(xiàng)目由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)的功能,雖然叫做插件,但其實(shí)這是攔截器功能。MyBatis 允許你在已映射語句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用。對于攔截器Mybatis為我們提供了一個Interceptor接口,通過實(shí)現(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類實(shí)現(xiàn)了InvocationHandler的接口,返回了一個JDK自身的動態(tài)動態(tài)代理類,對于plugin的wrap方法:

判斷當(dāng)前目標(biāo)對象是否有實(shí)現(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實(shí)例,里面帶有MappedStatement和method方法對應(yīng)的參數(shù)。

攔截器的可配置性:

相關(guān)文章

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

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

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

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

    這篇文章主要介紹了Java策略模式的簡單應(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í)際開發(fā)中的一點(diǎn)踩坑經(jīng)驗(yàn),內(nèi)容簡單易懂,需要的朋友可以參考下
    2020-07-07
  • SpringBoot讀取外部的配置文件的代碼實(shí)現(xiàn)

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

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

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

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

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

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

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

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

    Logback配置文件這么寫,還說你不會整理日志?

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

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

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

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

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

最新評論

永昌县| 宕昌县| 沽源县| 延边| 金寨县| 庄浪县| 额尔古纳市| 高安市| 麻栗坡县| 同德县| 河西区| 新巴尔虎右旗| 金坛市| 阜新市| 临城县| 宁晋县| 玛纳斯县| 象州县| 滁州市| 湘潭县| 江都市| 克山县| 巴楚县| 称多县| 蕲春县| 台山市| 法库县| 元阳县| 大埔县| 女性| 牟定县| 玉环县| 镇赉县| 绥德县| 霍山县| 深泽县| 永福县| 红桥区| 集贤县| 井冈山市| 垣曲县|