一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - Mybatis攔截器的實(shí)現(xiàn)介紹

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

2020-06-29 10:59CZengze JAVA教程

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

 MyBatis介紹

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

MyBatis攔截器介紹

MyBatis提供了一種插件(plugin)的功能,雖然叫做插件,但其實(shí)這是攔截器功能。MyBatis 允許你在已映射語句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用。對(duì)于攔截器Mybatis為我們提供了一個(gè)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個(gè)都是Configuration的方法,這些方法在MyBatis的一個(gè)操作(新增,刪除,修改,查詢)中都會(huì)被執(zhí)行到,執(zhí)行的先后順序是Executor,ParameterHandler,ResultSetHandler,StatementHandler。

接口的定義是:

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

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

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

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

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

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

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

對(duì)于getSignatureMap方法

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

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

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

攔截器的可配置性:

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

原文鏈接:http://blog.csdn.net/czengze/article/details/52976457

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久精品国产视频澳门 | 成人免费国产欧美日韩你懂的 | 精品久久久久中文字幕日本 | 亚洲美色综合天天久久综合精品 | 人与善交大片免费看 | 免费看日产一区二区三区 | 日本嫩交 | 美艳教师刘艳第三部166 | 数学老师扒开腿让我爽快 | 女子校生下媚药在线观看 | 短篇同学新婚h系列小说 | 亚洲AV蜜桃永久无码精品无码网 | t66y地址一地址二地址三 | 成人福利免费在线观看 | 秋霞在线一级 | 久久成人亚洲 | 美女的隐私无遮挡撒尿 | 精品国产线拍大陆久久尤物 | 精品久久久久久久国产潘金莲 | 动漫人物差差差动漫人物免费观看 | 日本片免费观看一区二区 | 亚洲精品视频在线免费 | 亚洲另类激情 | 香蕉久久夜色精品国产尤物 | jk制服白丝超短裙流白浆 | 色姑娘久久 | 男人狂躁女人下面狂叫图片 | 香蕉久草在线 | 亚洲酒色1314狠狠做 | 2022国产麻豆剧传媒剧情 | 亚洲福利在线观看 | 99热碰 | 免费超级乱淫视频播放性 | 爱豆传媒最新视频国产 | 免费高清视频日本 | 99久久精品自在自看国产 | 日韩色在线观看 | 日本不卡视频免费 | 国产一区二区三区水野朝阳 | 天天干夜夜玩 | 日韩国产欧美精品综合二区 |