java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > 设置Mybatis打印调试sql的方式

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

作者: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。

总结

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

您可能感兴趣的文章:
阅读全文