mybatis攔截器



一、MyBatis 允許你在已映射語句執行過程中的某一點進行攔截調用

默認情況下,MyBatis 允許使用插件來攔截的方法調用包括:(摘自官網http://mybatis.github.io/mybatis-3/zh/configuration.html

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

  二、當執行查詢時

調用過程:SqlSession.selectList -- >> Executor.query -->> StatementHandler.query 返回結果,那麼參數的設置是在哪呢?

StatementHandler有3個子類:SimpleStatementHandler、PreparedStatementHandler、CallableStatementHandler,

分別對應java.sql的Statement, PreparedStatement,CallableStatement。

在執行Executor.query時,創建Statement(StatementHandler.prepare)後會執行StatementHandler的parameterize,也就是參數化設置。查看源碼發現調用的時ParameterHandler 的setParameters方法,在該方法中會設置對應的參數。

三、在查詢過程中想要做一些額外的工作。例如:分頁等

則可以通過mybatis的攔截器,攔截查詢方法:

1、攔截Executor的query方法。攔截多個參數的方法。如果攔截參數少的那個方法,則可以在攔截器中參數源碼自定義調用。

2、StatementHandler 的query方法

3、ResultSetHandler 的handleResultSets或handleOutputParameters,直接對結果進行處理

在攔截器中可以修改SQL,設置參數等一系列自定義功能。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章