博為峰JavaEE技術文章 ——MyBatis 攔截器(2)攔截點

了解了Mybatis攔截器的接口Interceptor定義后,還需要進一步搞清楚這三個方法之間的關系,以及能夠攔截哪些方法。

Mybatis在執行攔截器時,對三個接口的執行順序:setProperties->plugin->intercept。先執行參數設置,然后生成代理對象,最后執行具體攔截操作。

在Mybatis官網,對能夠攔截哪些類和方法做了說明。MyBatis 允許在已映射語句執行過程中的某一點調用攔截方法。默認情況下,MyBatis允許使用插件來攔截的方法調用包括:

1.攔截執行器的方法

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

2.攔截參數的處理

ParameterHandler (getParameterObject, setParameters)

3.攔截結果集的處理

ResultSetHandler (handleResultSets, handleOutputParameters)

4.攔截Sql語法構建的處理

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

要定義攔截器對哪些方法進行攔截,需要在攔截器接口實現類上添加注解@Intercepts。@Intercepts標記一個類是Interceptor,然后在@Intercepts中定義@Signature,即攔截點(可以有多個)。type是指攔截的接口,method是將要攔截的方法,args進一步指定了該方法的參數類型,以區分重載方法。

下面是一個注解的例子:

@Intercepts({@Signature(

type= Executor.class,

method = "update",

args = {MappedStatement.class,Object.class})

})

該注解對的含義是,攔截Executor接口的update方法(其實也就是SqlSession的新增,刪除,修改操作),所有執行executor的update方法(有兩個參數:MappedStatement.class,Object.class)都會被添加了該注解的攔截器攔截到。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的...
    笨鳥慢飛閱讀 5,621評論 0 4
  • MyBatis提供了一種插件(plugin)的功能,雖然叫做插件,但其實這是攔截器功能。那么攔截器攔截MyBati...
    七寸知架構閱讀 3,256評論 3 54
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 解讀來源: 淘寶產品平臺部高級專家魏萌:基于價值洞見的產品創新(附PDF文件下載) http://www.wosh...
    涼姜閱讀 259評論 0 1
  • [因為和他在一起,我得以過上很不錯的物質生活。他越來越成功,我高興,有時也害怕會失去他。于是,有了這段對話。] 我...
    林青枳閱讀 187評論 0 1