国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Mybatis攔截器的實現介紹

2019-11-26 13:38:27
字體:
來源:轉載
供稿:網友

 MyBatis介紹

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

MyBatis攔截器介紹

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

MyBatis默認調用四種類型的方法:

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的一個操作(新增,刪除,修改,查詢)中都會被執行到,執行的先后順序是Executor,ParameterHandler,ResultSetHandler,StatementHandler。

接口的定義是:

這三個方法中,plugin用于處理器的構建,intercept用于處理代理類,setProperties用語攔截器屬性設置。
Plugin類實現了InvocationHandler的接口,返回了一個JDK自身的動態動態代理類,對于plugin的wrap方法:

判斷當前目標對象是否有實現對應需要攔截的接口,如果沒有則返回目標對象本身,如果有則返回一個代理對象。

代理對象的InvocationHandler正是一個Plugin,當目標對象執行接口方法時,如果是通過代理對象執行的,會調用invocationHandler的invoke方法,就是Plugin的invoke方法:

如果當前執行的方法是定義好的需要攔截的方法,則把目標對象、要執行的方法以及方法參數封裝成一個Invocation對象,再把封裝好的Invocation作為參數傳遞給當前攔截器的intercept方法。如果不需要攔截,則直接調用當前的方法。

對于getSignatureMap方法

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

攔截器的可配置性:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临澧县| 平南县| 辉南县| 龙山县| 马山县| 阿合奇县| 府谷县| 于田县| 拉萨市| 宁安市| 合江县| 崇明县| 公主岭市| 绥阳县| 泾源县| 定州市| 门头沟区| 伽师县| 上蔡县| 五华县| 长治市| 西平县| 乌鲁木齐市| 衡山县| 平顶山市| 永济市| 名山县| 遂川县| 琼结县| 乐都县| 正安县| 南郑县| 安国市| 娄烦县| 芒康县| 张家港市| 长顺县| 克山县| 通山县| 行唐县| 江阴市|