Mybatis 中如何優雅的增強日誌功能?
首先搞清楚那些地方需要列印日誌?透過對日誌的觀察,如下幾個位置需要打日誌:
-
在建立
prepareStatement
時,列印執行的 SQL 語句; -
訪問資料庫時,列印引數的型別和值
-
查詢出結構後,列印結果資料條數
因 此 在 日 志 模 塊 中 有
BaseJdbcLogger
、
ConnectionLogger
、
PreparedStatementLogger
和
ResultSetLogge
透過動態代理負責在不同的位置列印日誌;幾個相關類的類圖如下:
BaseJdbcLogger:所有日誌增強的抽象基類,用於記錄 JDBC 那些方法需要增強,儲存執行期間 sql 引數資訊;
ConnectionLogger:負責列印連線資訊和 SQL 語句。透過動態代理,對
connection
進行增強,如果是呼叫
prepareStatement
、
prepareCall
、
createStatement
的方法,列印要執行的 sql 語句並返回
prepareStatement
的代理物件(
PreparedStatementLogger
),讓
prepareStatement
也具備日誌能力,列印引數;
PreparedStatementLogger:對
prepareStatement
物件增強,增強的點如下:
- 增強
PreparedStatement
的 setxxx 方法將引數設定到columnMap
、columnNames
、columnValues
,為列印引數做好準備; - 增強
PreparedStatement
的 execute 相關方法,當方法執行時,透過動態代理列印引數,返回動態代理能力的 resultSet; - 如果是查詢,增強
PreparedStatement
的getResultSet
方法,返回動態代理能力的 resultSet;如果是更新,直接列印影響的行數
ResultSetLogge:負責列印資料結果資訊;
最後一個問題:上面講這麼多,都是日誌功能的實現,那 日誌功能是怎麼加入主體功能的?
答:既然在
Mybatis 中
Executor 才是訪問資料庫的元件,日誌功能是在
Executor 中被嵌入的,具體程式碼在
org.apache.ibatis.executor.SimpleExecutor.prepareStatement(StatementHandler, Log)
方法中,如下圖所示:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69964492/viewspace-2765518/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL慢日誌功能分析及優化增強MySql優化
- 如何優雅的記錄操作日誌?
- 如何優雅的將Laravel日誌推到Kafka?LaravelKafka
- 如何優雅的使用MyBatis?MyBatis
- 如何優雅地記錄操作日誌?
- 如何優雅地記錄操作日誌
- 如何優雅地上報前端監控日誌前端
- java 日誌脫敏框架 sensitive,優雅的列印脫敏日誌Java框架
- springboot(六):如何優雅的使用mybatisSpring BootMyBatis
- Spring Boot(六):如何優雅的使用 MybatisSpring BootMyBatis
- laravel如何利用中介軟體優雅的記錄請求日誌Laravel
- 如何利用NLog輸出結構化日誌,並在Kibana優雅分析日誌?
- mybatis日誌MyBatis
- MyBatis(六)日誌MyBatis
- React中如何優雅的使用UEditorReact
- 容器引擎Docker和容器編排kubernetes如何優雅的收集容器日誌Docker
- 教你更優雅地寫 API 之「記錄日誌」API
- Oracle歸檔日誌暴增排查優化Oracle優化
- Mybatis原始碼初探——優雅精良的骨架MyBatis原始碼
- Mybatis-Plus增強包MyBatis
- Oracle12c功能增強 新特性之管理功能的增強Oracle
- MyBatis實戰:如何將拼接的SQL列印到日誌MyBatisSQL
- SpringBoot詳解(四)-優雅地處理日誌Spring Boot
- Oracle 12c中的轉換功能增強Oracle
- Oracle 12c中增強的PL/SQL功能OracleSQL
- MyBatis-Pro,新一代的MyBatis增強框架MyBatis框架
- 如何優雅的在flask中記錄logFlask
- 如何在 React 中優雅的使用 addEventListenerReactdev
- .NET Framework 新功能和增強的功能Framework
- Mybatis日誌原始碼探究MyBatis原始碼
- mybatis列印sql日誌配置MyBatisSQL
- 更便捷的Mybatis增強外掛——EasyMybatisMyBatis
- 【Java進階】利用APT優雅的實現統一日誌格式JavaAPT
- 徹底幹掉 BeanUtils,最優雅的 Mapstruct 增強工具全新出爐BeanStruct
- 程式中的敏感資訊如何優雅的處理?
- 手把手教你如何優雅的使用Aop記錄帶引數的複雜Web介面日誌Web
- 在React專案中,如何優雅的優化長列表React優化
- 有了鏈路日誌增強,排查Bug小意思啦!