關(guān)于設(shè)置Mybatis打印調(diào)試sql的兩種方式
設(shè)置Mybatis打印調(diào)試sql的兩種方式
問題描述
在使用mybatis進(jìn)行開發(fā)的時(shí)候,由于可以動(dòng)態(tài)拼接sql,這樣大大方便了我們。
但是也有一定的問題,當(dāng)我們動(dòng)態(tài)sql拼接的塊很多的時(shí)候,我們要想從*mapper.xml中直接找出完整的sql就會(huì)非常的難,這個(gè)時(shí)候經(jīng)常會(huì)需要把組合之后的完整sql調(diào)試出來比較好。
下面來看兩種調(diào)試出sql的兩種方式
解決方案
方案1:
網(wǎng)上說的比較多的,之前也是這么用的一種方式
1:首先將ibatis log4j運(yùn)行級(jí)別調(diào)到DEBUG可以在控制臺(tái)打印出ibatis運(yùn)行的sql語句
2:添加如下語句
###顯示SQL語句部分 log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.Java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
方案2:
最近發(fā)現(xiàn)的一種方式,方便快捷
在mybatis.cfg.xml中增加如下配置
<settings>中增加 <setting name="logImpl" value="STDOUT_LOGGING" />
這就是mybatis調(diào)試出sql的兩種方式~~~
Mybatis打印sql
我們在使用mybatis開發(fā)過程中,經(jīng)常需要打印sql以及輸入輸出,下面說一下mybatis結(jié)合log4j打印sql的。
1.添加mybatis配置
mybatis的日志打印方式比較多,SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING,可以根據(jù)自己的需要進(jìn)行配置。
建議在mybatis.xml中添加如下配置,因?yàn)橛行﹚eb容器(websphere、jboss等)中自帶私有日志,如果我們不配置mybatis默認(rèn)會(huì)使用容器私有日志組件,而不是使用log4j
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
2.log4j.xml配置
mybatis日志打印sql,由于我們用的是mybatis3.3,高于mybatis3.2
所以如果需要打印查詢sql、參數(shù)和結(jié)果,則配置如下:
<logger name="com.example.mapper" additivity="false"> <level value="DEBUG" /> <appender-ref ref="SQL_DEBUG" /> <appender-ref ref="SQL_INFO" /> <appender-ref ref="SQL_ERROR" /> </logger>
其中name中填寫的是mapper中的namespace路徑:預(yù)約模塊的都是com.example.mapper
如果mybatis低于3.2則配置才會(huì)需要添加下面的配置
<logger name="com.ibatis" additivity="true">
<level value="DEBUG" />
<appender-ref ref="STDOUT" />
<appender-ref ref="DEBUG" />
</logger>
<logger name="java.sql" additivity="true">
<level value="DEBUG" />
<appender-ref ref="STDOUT" />
<appender-ref ref="DEBUG" />
</logger> 3.如果需要將sql單獨(dú)打印
則添加如下配置
<appender name="SQL_DEBUG" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="log/sql/debug.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%-5p] [%d{yyyy-MM-dd HH:mm:ss}] %l - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>4.建議日志additivity屬性配置為false
這樣可以避免日志重復(fù)打印,
當(dāng)然這也需要看情況,如果需要結(jié)合上下文日志來跟蹤問題,可以設(shè)置為true。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud自定義loadbalancer實(shí)現(xiàn)標(biāo)簽路由的詳細(xì)方案
本文介紹了通過標(biāo)簽路由解決前端開發(fā)環(huán)境接口調(diào)用慢的問題,實(shí)現(xiàn)方案包括在本地服務(wù)注冊元數(shù)據(jù)、自定義負(fù)載均衡器、以及網(wǎng)關(guān)配置等步驟,通過環(huán)境變量設(shè)置標(biāo)簽,網(wǎng)關(guān)根據(jù)請求頭中的標(biāo)簽進(jìn)行路由,從而實(shí)現(xiàn)前后端互不干擾的開發(fā)調(diào)試,感興趣的朋友一起看看吧2025-02-02
SpringBoot全局域名替換的實(shí)現(xiàn)
本文主要介紹了SpringBoot全局域名替換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-09-09
IDEA源碼修改器JarEditor使用(反編譯-打包一步到位)
JarEditor是一個(gè)IDEA插件,用于修改jar包中的類文件,它允許用戶在不解壓jar包的情況下,直接在IDEA中編輯和修改類文件的源碼,修改完成后,可以一鍵編譯并生成新的jar包,替換原jar包2025-01-01
Java實(shí)現(xiàn)二進(jìn)制與十進(jìn)制之間互相轉(zhuǎn)換的完整代碼
在編程中,數(shù)制轉(zhuǎn)換是一個(gè)非常常見的需求,Java 作為一種高級(jí)語言,提供了便捷的方法來實(shí)現(xiàn) 二進(jìn)制和 十進(jìn)制之間的轉(zhuǎn)換,本文將介紹 Java 中二進(jìn)制與十進(jìn)制互轉(zhuǎn)的原理與實(shí)現(xiàn)方式,并附上完整代碼示例,2025-08-08
,需要的朋友可以參考下
java利用Socket實(shí)現(xiàn)聊天室功能實(shí)例
這篇文章主要介紹了java利用Socket實(shí)現(xiàn)聊天室功能實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié)
這篇文章主要介紹了Spring5學(xué)習(xí)之基礎(chǔ)知識(shí)總結(jié),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-05-05

