idea打印sql的插件_[Mybatis]-[基础支持层]-插件-自定义简易SQL打印插件
在 mybatis 中允許針對 SQL 在執行前后進行擴展操作,而這些擴展操作也叫做插件。
在 Mybaits 中允許用插件來攔截的方法包括:
- Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
- ParameterHandler (getParameterObject, setParameters)
- ResultSetHandler (handleResultSets, handleOutputParameters)
- StatementHandler (prepare, parameterize, batch, update, query)
實現一個 plugin 的 步驟如下
step1、插件實現類實現了 Interceptor 接口
step2、通過注解 @Intercepts 指定了該插件需要攔截的對象
step3、在 mybatis-config.xml 中的 <plugins> 下配置插
自定義簡易 SQL 打印插件
簡易 SQL 打印插件,忽略細節思路
SQL 在 Mybatis 啟動完成后已經被加載到了 Configuration 對象中,所以無論是 Executor 、ParameterHandler、ResultSetHandler 、StatementHandler 哪一種情況下的攔截,只要持有了Configuration 對象也就相當于有了執行 SQL,而SQL 參數也是一樣的,而在 Mybatis 運行期間 Configuration 對象會伴隨整個執行流程,包括 Executor 、ParameterHandler、ResultSetHandler 、StatementHandler 等環節。
在 Mybatis 中執行的處理流程無論是需要參數處理或者結果集處理,最后所有的方法都會經由 Executor 所有,只需要攔截 Executor 對象即可。
針對 SQL 的打印,及其結果打印,只針對增刪改查方法,而在 Executor 中,增刪改由 Executor#update 完成,查則由 Executor#query 實現。
所以針對 SQL 的打印只需要攔截 Executor#update 和 Executor#query方法即可
代碼實現
step1、創建插件類 PrintSqlPlugin 并實現 Interceptor 接口
step2、追加注解 @Intercepts 指定攔截對象
方法都有重載的方法,需要指定多個特定的參數來特指特定的方法,這里為演示案例不寫全step 1、和step 2 實現后的代碼結構如下:
代碼實現如下:
Interceptor#interceptor部分代碼如下:
主體執行邏輯(具體實現不展開)
- 1、獲取執行 SQL。(如:select * from user_info where id = ?)
- 2、獲取執行 SQL 對應的參數。(如:param1 = 1)
- 3、將SQL 對照對應的參數進行拼接,并打印相關SQL數據。(如:select * from user_info where id = 1)
- 4、調用原有對象 target 執行sql查詢,并獲得結果集
- 5、打印結果數據
step3、在 mybatis-config.xml 中配置
測試,控制臺打印日志如下
總結
以上是生活随笔為你收集整理的idea打印sql的插件_[Mybatis]-[基础支持层]-插件-自定义简易SQL打印插件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 真我GT Neo5 SE普及旗舰体验:双
- 下一篇: 数据库课程设计(Mysql数据库课程设计