標籤:

如何在mybatis中調試查看生成的sql語句?

主要是查看有&&&&這樣的條件,如何在eclipse中查看生成的sql語句?


方法:

MyBatis 的配置文件 Configuration 中有相關屬性,設屬性即可,不用再放一個 log4j.properties 文件。

&

&

……

&

&

&

配置完成後,在 IDE 的控制台下可以看到程序運行過程中的 SQL,參數,返回結果等,

可以參照 API 文檔,mybatis - MyBatis 3 中關於 settings 的描述

如需要第三方日誌,在項目 src 目錄下放相應的配置文件即可。MyBatis 會自動識別。

原理:

參照文檔,可以看到 mybatis 支持這些日誌:

  • SLF4J
  • LOG4J
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING
  • NO_LOGGING

我們可以看到,MyBatis 支持的日誌種類還是比較多的。其他的不做贅述 。就來說說STDOUT_LOGGING ,stdout 翻譯是 [計][unix] 標準輸出(設備)文件; 所以,簡單可以理解為命令行輸出的結果。記得之前用一很老的 web 伺服器 resin,日誌文件就保存在 stdout.log、stderr.log 中。按照這個推理,stdout 就是在控制台輸出的。但是,要用事實說話。我去翻了下這裡的源碼:

在 Configuration.java中可以看到如下代碼

typeAliasRegistry.registerAlias("STDOUT_LOGGING", StdOutImpl.class);

再看 StdOutImp.java

@Override
public void error(String s) {
System.err.println(s);
}

@Override
public void debug(String s) {
System.out.println(s);
}

@Override
public void trace(String s) {
System.out.println(s);
}

顯而易見,STDOUT_LOGGING 這種方式就是輸出在了控制台上。在 IDE 中是控制台,在伺服器上就是 web 伺服器的輸出日誌中了。


我推薦使用log4jdbc或是log4jdbc-remix,其實這2個都差不多,這個會把你sql的的?以實際的值填充進去,對查看生成的sql非常有幫助


如果你用SpringBoot,那麼在application.properties文件加入以下語句就好了:logging.level.com.xxx.xxx.*.mapper=debug(com開始,就是你mapper介面所在的包路勁)

號外:SpringBoot真是好東西啊。


mybatis的源碼中,那一款方法是生成sql的?


把我代碼里log的配置貼一份 供參考

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


推薦閱讀:

mybatis和hibernate區別大不大?

TAG:MyBatis |