MyBatis SQL 在控制檯打印

mybatis 怎麼打印執行的sql?

查看了官方文檔,跟蹤了mybatis源碼發現有兩種方式:

方法一、在mybatis配置的xml中<configuration>標籤下添加

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING" />
</settings>

sql打印成控制檯

==>  Preparing: select FIELD_VALUE,CATE_CODE from GOODS_CATEGORY_DICT_MAPPING 
==> Parameters: 
<==    Columns: FIELD_VALUE, CATE_CODE
<==        Row: 22001, V1030011001001
//.....
<==      Total: 27

方法二、在log4j/logback/logck4j2中添加我們項目包路徑mapper爲debug

<logger name="com.hh.sns.goods" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT"/>
</logger>

sql通過DEBUG在控制檯打印效果

2018-03-29 15:29:44.757 DEBUG c.h.s.g.b.m.G.selectAll [main] -==>  Preparing: select FIELD_VALUE,CATE_CODE from GOODS_CATEGORY_DICT_MAPPING 
2018-03-29 15:29:44.774 DEBUG c.h.s.g.b.m.G.selectAll [main] -==> Parameters: 
2018-03-29 15:29:44.792 DEBUG c.h.s.g.b.m.G.selectAll [main] -<==      Total: 27

mybatis日誌打印源碼:org.apache.ibatis.logging.jdbc.ConnectionLogger

 public Object invoke(Object proxy, Method method, Object[] params)
      throws Throwable {
    try {
      //....... 
      if ("prepareStatement".equals(method.getName())) {
        if (isDebugEnabled()) {//是否打印日誌判斷
          debug(" Preparing: " + removeBreakingWhitespace((String) params[0]), true);
        }        
        PreparedStatement stmt = (PreparedStatement) method.invoke(connection, params);
        stmt = PreparedStatementLogger.newInstance(stmt, statementLog, queryStack);
        return stmt;
      } //.........
    } catch (Throwable t) {
      throw ExceptionUtil.unwrapThrowable(t);
    }
  }

原文: https://blog.csdn.net/javaee_ssh/article/details/79743150

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章