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框架
- 如何利用NLog輸出結構化日誌,並在Kibana優雅分析日誌?
- laravel如何利用中介軟體優雅的記錄請求日誌Laravel
- mybatis日誌MyBatis
- 容器引擎Docker和容器編排kubernetes如何優雅的收集容器日誌Docker
- MyBatis(六)日誌MyBatis
- 教你更優雅地寫 API 之「記錄日誌」API
- React中如何優雅的使用UEditorReact
- Oracle歸檔日誌暴增排查優化Oracle優化
- MyBatis實戰:如何將拼接的SQL列印到日誌MyBatisSQL
- Mybatis原始碼初探——優雅精良的骨架MyBatis原始碼
- 如何在 React 中優雅的使用 addEventListenerReactdev
- 【優雅寫程式碼系統】springboot+mybatis+pagehelper+mybatisplus+druid教你如何優雅寫程式碼Spring BootMyBatisUI
- Mybatis日誌原始碼探究MyBatis原始碼
- 手把手教你如何優雅的使用Aop記錄帶引數的複雜Web介面日誌Web
- 徹底幹掉 BeanUtils,最優雅的 Mapstruct 增強工具全新出爐BeanStruct
- Mybatis-Plus增強包MyBatis
- 如何優雅的在flask中記錄logFlask
- MyBatis-Pro,新一代的MyBatis增強框架MyBatis框架
- 如何優雅的搞垮伺服器,再優雅的救活伺服器
- 有了鏈路日誌增強,排查Bug小意思啦!
- 設定mybatis 是否列印日誌MyBatis
- 在React專案中,如何優雅的優化長列表React優化
- Ubuntu在Vbox中安裝增強功能Ubuntu
- 更便捷的Mybatis增強外掛——EasyMybatisMyBatis
- 如何優雅的使用介面
- 如何優雅的寫Markdown
- 如何在 Linux 中管理日誌Linux
- 如何在vue專案中優雅的使用SVGVueSVG
- Spring中如何優雅的使用監聽器模式Spring模式
- 如何在React中優雅的使用Interval(輪詢)React