1. 程式人生 > >Mybatis在控制檯列印sql

Mybatis在控制檯列印sql

搜尋資料只能利用log4j實現
這裡只是添加了一些說明

網上log4j.properties檔案中mybatis列印sql的配置

#DEBUG < INFO < WARN < ERROR < FATAL
### set log levels ###
log4j.rootLogger=debug, stdout

### 把日誌資訊輸出到控制檯 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n

### show 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

這種方法是可以列印sql的,但是因為是debug級別,導致控制檯輸出了很多無用的debug資訊,對檢查sql依然不好找,所以這種方法不推薦

優化解決方案

因為我們一般設定log4j都是info級別的log4j.rootLogger=info, stdout,但log4j支援對各個模組設定日誌級別,所以只需要對列印sql的那一些類設定debug級別就可以了,配置如下:

在log4j.properties中新增下面一行

log4j.logger.com.web.dao=debug

語法解釋:log4j.logger.[package].[class]=[level],[appender]

  • [package] 包路徑,如上面的 com.web.dao 包
  • [class] 類名,可不寫
  • [level] 日誌級別, debug
  • [appender] 日誌輸出的地址,可忽略

這樣就可以把com.web.dao包下的所有類裡的sql打印出來

如:

2016-09-22 00:00:00 DEBUG [com.web.dao.UserMapper.selectByPrimaryKey] ==>  Preparing: select `id` ,`name` ,`pwd` from user where `id` = ? 
2016-09-22 00:00:00 DEBUG [com.web.dao.UserMapper.selectByPrimaryKey] ==> Parameters: 1(String)
2016-09-22 00:00:00 DEBUG [com.web.dao.UserMapper.selectByPrimaryKey] <==      Total: 1