在开发过程中我们往往需要打印出SQL语句,这样就方便我们监控问题。下面我来简单的介绍一下我使用过的两种方法,一种需要使用log4j,一种需要在MyBatis的配置文件里配置。
第一种方法:
直接使用Log4j输出SQL语句。这种方法比较简单,只需要在log4j的配置文件(log4j.properties)里面进行配置,不需要进行其他额外的配置,当然,这里需要使用log4j的jar包,如果使用maven,那么在pom文件里面添加即可。
log4j.properties配置文件:
### set log levels ###
log4j.rootLogger = INFO , C , D , E
### console ###
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.Target = System.out
log4j.appender.C.layout = org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern = [merchant_wap][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n
### log file ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ../logs/merchant_wap.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [merchant_wap][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n
### exception ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = ../logs/merchant_wap_error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = [merchant_wap][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n
#下面这段是重点
###############Log4j 4 SQL Output start#################
log4j.logger.com.***.***.dao=DEBUG
log4j.logger.com.springframework=DEBUG
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
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl=DEBUG
log4j.logger.java.sql=DEBUG,CONSOLE
###############Log4j 4 SQL Output end###################
com.***.***.dao 是你的 Dao包所在的路径
通过上面的配置后,即可在控制台查看mybatis执行的SQL语句。
第二种方法:
在mybatis配置文件的<settings>标签里面添加如下语句:
<setting name="logImpl" value="STDOUT_LOGGING" />
具体如:
<settings>
<!-- 打印查询语句 这种方式不需要进行log4j配置 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
如果使用spring集成了mybatis,那么就直接在spring-mybatis文件里的mybatis配置标签里添加上面的语句即可。
如果配置文件里没有<settings>标签,我们可以新建一个mybatis-config.xml文件,然后在spring-mybatis(spring集成mybatis的配置文件)里引入该文件即可,具体如下:
1. 新建的mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 打印查询语句 这种方式不需要进行log4j配置 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
</configuration>
2. spring-mybatis.xml中引入的mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
">
<!-- 配置数据源 使用的是Druid数据源 -->
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="0" />
<!-- 连接池最大使用连接数量 -->
<property name="maxActive" value="20" />
<!-- 连接池最小空闲 -->
<property name="minIdle" value="0" />
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="60000" />
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="33" />
<!-- 用来检测有效sql -->
<property name="validationQuery" value="${validationQuery}" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="testWhileIdle" value="true" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="25200000" />
<!-- 打开removeAbandoned功能 -->
<property name="removeAbandoned" value="true" />
<!-- 1800秒,也就是30分钟 -->
<property name="removeAbandonedTimeout" value="1800" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="true" />
<!-- 监控数据库 -->
<property name="filters" value="mergeStat" />
</bean>
<!-- myBatis文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 打印查询语句 如果使用log4j并且在log4j.properties里进行设置就不需要在xml里进行配置-->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
<property name="mapperLocations" value="classpath:com/picc/merchantwap/mapping/*.xml" />
<!-- pageHelper 分页插件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=Oracle
</value>
</property>
</bean>
</array>
</property>
</bean>
引入的标签:<property name="configLocation" value="classpath:mybatis-config.xml"></property>
通过上面的配置,我们就可以在控制台查看执行的SQL语句了。
因为每个项目的配置文件都不太一样,所以具体配置标签所在的位置得根据情况来定。