mybatis sql 打印

本文介绍两种在MyBatis中打印SQL日志的方法:一种是在配置文件中设置logImpl为STDOUT_LOGGING,另一种是在log框架中为指定包设置DEBUG级别。

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);
    }
  }


### 配置 MyBatis 打印 SQL 语句 为了使 MyBatis 能够在控制台打印出执行的 SQL 语句,在 Spring Boot 应用程序中可以采用多种方法进行配置。 #### 方法一:通过 `application.properties` 文件设置 可以在项目的 `application.properties` 文件中加入如下配置项,指定 MyBatis 使用标准输出实现日志记录功能: ```properties mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl ``` 此配置使得每次 MyBatis 发送查询到数据库之前都会先将其转换成字符串形式并显示于终端上[^2]。 #### 方法二:利用 `application.yml` 进行相同操作 对于偏好 YAML 格式的开发者来说,则可在对应的配置文件里这样写入相应的参数: ```yaml mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ``` 这同样达到了让应用程序运行期间能够看到实际发出的 SQL 文本的效果。 #### 方法三:修改 XML 形式的 MyBatis 设置 另外一种途径是在 MyBatis 的全局设定部分增加特定标签来激活这一特性。具体做法是在相关 XML 文件内添加如下片段: ```xml <settings> <!-- 启用SQL日志 --> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> ``` 上述代码片断会指示框架每当构建好一条待发送给 DBMS 处理的关系型指令时就立即向外界透露其具体内容[^3]。 值得注意的是,除了简单的标准输出之外,还有其他几种不同的日志机制可供选择,比如 SLF4J、LOG4J 等等,依据个人喜好以及项目需求的不同而定[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值