1. 日志
1.1. 日志配置
MyBatis的总体配置文件中可以通过setting配置所采用的日志输出途径,也可以配置为不输出日志。
logImpl:配置MyBatis使用的日志实现方式。可以选的方式:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING。也可以是实现了org.apache.ibatis.logging.Log接口的类的全限定名。
<configuration>
<!-- 配置参数 -->
<settings>
<!-- 使用LOG4J日志 -->
<setting name="logImpl" value="LOG4J" />
</settings>
</configuration>
在配置为SLF4J和LOG4J时,需要再配置一个log4j.properties文件。
log4j.rootLogger=DEBUG,CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.logger.com.genuitec.eclipse.sqlexplorer=WARN
log4j.logger.org.apache=WARN
log4j.logger.NET.sf.hibernate=WARN
log4j.properties文件中,可以对某些Mapper接口进行特殊配置。
比如可以指定com.test.mybatis3.mapper.PersonMapper这个接口的配置选项为WARN,此时该接口将相关数据库操作的日志级别为WARN,而其它未特殊配置的Mapper接口的日志级别仍然为DEBUG。
log4j.logger.com.test.mybatis3.mapper.PersonMapper=WARN
MyBatis同时允许对某个接口的某个方法设定特殊的日志级别。
#Mapper interface:PersonMapper Log level=TRACE
log4j.logger.com.test.mybatis3.mapper.PersonMapper=DEBUG
#Mapper method:PersonMapper.findAllPersons Log level=TRACE
log4j.logger.com.test.mybatis3.mapper.PersonMapper.findAllPersons=TRACE
MyBatis中各种特定的日志级别如下所示:
SQL语句:DEBUG
结果集: TRACE
在将日志级别设置为TRACE级别时,可以看到以下MyBatis日志输出:
0 [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findAllPersons - ==> Preparing: select * from t_person order by id asc
63 [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findAllPersons - ==> Parameters:
78 [main] TRACE com.test.mybatis3.mapper.PersonMapper.findAllPersons - <== Columns: id, name, status
78 [main] TRACE com.test.mybatis3.mapper.PersonMapper.findAllPersons - <== Row: lisi, li si, 0
78 [main] TRACE com.test.mybatis3.mapper.PersonMapper.findAllPersons - <== Row: zhangsan, zhang san, 0
78 [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findAllPersons - <== Total: 2
当不使用Mapper接口方式实现数据库访问,而是直接使用SqlSession接口的selectList()等方法实现时,只需要将前面介绍的Mapper接口的全限定名修改为Mapper配置文件中的mapper结点的namespace属性的值即可,也可以单独配置某个namespace下的单个SQL语句的日志级别。在使用Mapper接口方式时,由于namespace的值必须和Mapper接口的全限定名相同,所以此时也可以认为在log4j.properties文件中使用的是namespace的值。
本文参考了MyBatis官方网站的介绍:http://www.mybatis.org/mybatis-3/zh/logging.html。