MyBatis在使用过程中不开启日志,调试起来非常难受。总结一下MyBatis日志配置方法,文章参考MyBatis官方文档:http://www.mybatis.org/mybatis-3/zh/logging.html
一.MyBatis日志实现(摘自官网)
Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具:
- SLF4J
- Apache Commons Logging
- Log4j 2
- Log4j
- JDK logging
具体选择哪个日志实现工具由MyBatis的内置日志工厂确定。它会使用最先找到的(按上面列举的顺序查找)。 如果一个都未找到,日志功能就会被禁用。
二.指定使用的日志
1.mybatis-config.xml
在MyBatis总配置文件中添加<setting name="logImpl" value="" />标签,指定使用的日志。可选值如注释中所示,下面以Log4j为例:
<settings>
....
<!--
指定Mybatis所用日志的具体实现,value属性可选值:
SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING
-->
<setting name="logImpl" value="LOG4J"/>
...
</settings>
2.Log4j日志配置
(1).引入jar包,maven依赖如下:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
(2).log4j.properties配置
例如需要记录com.my.mybatis.mapper包下所有XXXMapper接口或者XXXMpper.xml配置文件的日志信息,设置log4j.logger.com.my.mybatis.mapper=DEBUG,日志级别为DEBUG,其他可选值如INFO、ERROR等;该配置文件需要放在根目录下,简单配置如下:
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.my.mybatis.mapper=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
添加好以上配置以后,Log4J就会把com.my.mybatis.mapper包下的所有XXXMapper接口中方法的执行日志记录下来,设置为DEBUG级别后只会记录SQL
三.测试
1.com.my.mybatis.mapper.UserMapper
UserMapper接口类
public interface UserMapper {
public User findById(Long id);
}
2.com.my.mybatis.mapper.UesrMapper.xml
UserMapper配置文件,namespace属性建议配置成对应接口类完整名称
...
<mapper namespace="com.my.mybatis.mapper.UserMapper">
<resultMap type="com.my.mybatis.pojo.User" id="userMap">
<id property="id" column="user_id"/>
<result property="user_name" column="user_name"/>
<result property="user_age" column="user_age"/>
</resultMap>
<select id="findById" parameterType="long" resultMap="userMap">
select t.id user_id, t.*
from t_user t
where t.id = #{id}
</select>
</mapper>
3.测试
public void testLog() throws Exception {
InputStream inputStream = org.apache.ibatis.io.Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = userMapper.findById(1L);
System.out.println(user.getUser_name());
session.commit();
session.close();
}
日志信息:
2017-11-14 19:45:47 JakartaCommonsLoggingImpl.java DEBUG ==> Preparing: select t.id user_id, t.* from t_user t where t.id = ?
2017-11-14 19:45:48 JakartaCommonsLoggingImpl.java DEBUG ==> Parameters: 1(Long)
2017-11-14 19:45:48 JakartaCommonsLoggingImpl.java DEBUG <== Total: 1
小明
四.其他日志
1.mybatis-config.xml
<settings>
...
<setting name="logImpl" value="SLF4J"/>
...
</settings>
2.引入jar包
需要3个jar包,slf4j-api-xxx.jar、slf4j-log4j12-xxx.jar、log4j-xxx.jar;直接引入slf4j-log4j12-xxx.jar即可,会自动引入依赖的另外2个jar包
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>
3.配置log4j.properties
配置同上,测试同上