使用过hibernate的朋友都知道,hibernate会将执行的sql打印到日志中。
打印出执行的sql好处不言而喻,那么mybatis如何将日志打印出来呢。
1.在pom.xml中添加依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
会下载以下3个jar包
如果您不是使用maven管理jar包,那就下载这三个jar加载到项目classpath路径下即可。
2.在根目录下添加log4j.properties文件
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
说明:须将日志级别调到DEBUG级别,mybatis才会进行sql输出。个人验证一下,确实如此。
3.控制台输出结果
[main] DEBUG [com.neutron.flowers.mapper.userMapper.query] - ==> Preparing: select id,name,age from users where id = ?
[main] DEBUG [com.neutron.flowers.mapper.userMapper.query] - ==> Parameters: 1(Integer)
[main] DEBUG [com.neutron.flowers.mapper.userMapper.query] - <== Total: 1
User [id=1, name=zhangsan, age=15]
4.使用log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="debug" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
注意:两种配置文件使用一种即可,其中xml配置在某种程度更加清晰易懂
5.输出结果如下
DEBUG 07-06 07:12:19,964 Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. (LogFactory.java:135)
DEBUG 07-06 07:12:20,254 PooledDataSource forcefully closed/removed all connections. (PooledDataSource.java:316)
DEBUG 07-06 07:12:20,254 PooledDataSource forcefully closed/removed all connections. (PooledDataSource.java:316)
DEBUG 07-06 07:12:20,254 PooledDataSource forcefully closed/removed all connections. (PooledDataSource.java:316)
DEBUG 07-06 07:12:20,254 PooledDataSource forcefully closed/removed all connections. (PooledDataSource.java:316)
DEBUG 07-06 07:12:20,443 Opening JDBC Connection (JdbcTransaction.java:138)
DEBUG 07-06 07:12:20,969 Created connection 1884171537. (PooledDataSource.java:387)
DEBUG 07-06 07:12:20,974 ==> Preparing: select id,name,age from users where id = ? (BaseJdbcLogger.java:145)
DEBUG 07-06 07:12:21,045 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 07-06 07:12:21,089 <== Total: 1 (BaseJdbcLogger.java:145)
DEBUG 07-06 07:12:21,090 Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@704e2d11] (JdbcTransaction.java:92)
DEBUG 07-06 07:12:21,090 Returned connection 1884171537 to pool. (PooledDataSource.java:344)
User [id=1, name=zhangsan, age=15]