关于设置Mybatis打印调试sql的两种方式
作者:RelievedAbility
设置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。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。