关于设置Mybatis打印调试sql的两种方式

 更新时间:2023年08月28日 09:23:23   作者:RelievedAbility  
这篇文章主要介绍了关于设置Mybatis打印调试sql的两种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

设置Mybatis打印调试sql的两种方式

问题描述

在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们。

但是也有一定的问题,当我们动态sql拼接的块很多的时候,我们要想从*mapper.xml中直接找出完整的sql就会非常的难,这个时候经常会需要把组合之后的完整sql调试出来比较好。

下面来看两种调试出sql的两种方式

解决方案

方案1:

网上说的比较多的,之前也是这么用的一种方式

1:首先将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的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:

最近发现的一种方式,方便快捷

在mybatis.cfg.xml中增加如下配置

<settings>中增加
<setting name="logImpl" value="STDOUT_LOGGING" />

这就是mybatis调试出sql的两种方式~~~

Mybatis打印sql

我们在使用mybatis开发过程中,经常需要打印sql以及输入输出,下面说一下mybatis结合log4j打印sql的。

1.添加mybatis配置

mybatis的日志打印方式比较多,SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING,可以根据自己的需要进行配置。

建议在mybatis.xml中添加如下配置,因为有些web容器(websphere、jboss等)中自带私有日志,如果我们不配置mybatis默认会使用容器私有日志组件,而不是使用log4j

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

2.log4j.xml配置

mybatis日志打印sql,由于我们用的是mybatis3.3,高于mybatis3.2

所以如果需要打印查询sql、参数和结果,则配置如下:  

 <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路径:预约模块的都是com.example.mapper

如果mybatis低于3.2则配置才会需要添加下面的配置

<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单独打印

则添加如下配置

<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

这样可以避免日志重复打印,

当然这也需要看情况,如果需要结合上下文日志来跟踪问题,可以设置为true。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解Spring DeferredResult异步操作使用场景

    详解Spring DeferredResult异步操作使用场景

    本文主要介绍了Spring DeferredResult异步操作使用场景,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • SpringBoot使用RabbitMQ延时队列(小白必备)

    SpringBoot使用RabbitMQ延时队列(小白必备)

    这篇文章主要介绍了SpringBoot使用RabbitMQ延时队列(小白必备),详细的介绍延迟队列的使用场景及其如何使用,需要的小伙伴可以一起来了解一下
    2019-12-12
  • Java数据类型转换详解

    Java数据类型转换详解

    这篇文章主要讲解Java中基本数据类型、字符串与其它数据类型以及常见的日期类型的转换,希望能给大家做一个参考。
    2016-06-06
  • SpringBoot中使用异步调度程序的高级方法

    SpringBoot中使用异步调度程序的高级方法

    本文主要介绍了SpringBoot中使用异步调度程序的高级方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Java命令设计模式详解

    Java命令设计模式详解

    这篇文章主要为大家详细介绍了Java命令设计模式,对命令设计模式进行分析理解,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • application.yml和bootstrap.yml不生效的3种解决方案

    application.yml和bootstrap.yml不生效的3种解决方案

    SpringBoot默认支持 properties(.properties) 和 YAML(.yml .yaml ) 配置文件,本文主要介绍了application.yml和bootstrap.yml不生效的3种解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Spring Boot 防止接口恶意刷新和暴力请求的实现

    Spring Boot 防止接口恶意刷新和暴力请求的实现

    本文主要介绍了Spring Boot 防止接口恶意刷新和暴力请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Mac修改默认jdk版本的方法总结

    Mac修改默认jdk版本的方法总结

    这篇文章主要介绍了Mac修改默认jdk版本的相关资料,文中详细介绍了如何将Java版本从Java 17降低到Java 8,并通过修改.bash_profile文件来永久生效,需要的朋友可以参考下
    2024-12-12
  • Java 执行CMD命令或执行BAT批处理方式

    Java 执行CMD命令或执行BAT批处理方式

    这篇文章主要介绍了Java 执行CMD命令或执行BAT批处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • springboot+mybatis+枚举处理器的实现

    springboot+mybatis+枚举处理器的实现

    在Spring boot项目开发中经常遇到需要使用枚举的场景,本文就介绍了springboot+mybatis+枚举处理器的实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论