在MyBatis中开启SQL日志的具体步骤

 更新时间:2025年11月21日 09:19:14   作者:chxii  
文章详细介绍了在原生MyBatis和SpringBoot中开启MyBatis日志的具体步骤,包括引入日志依赖、配置日志文件和设置日志级别,文章还提供了对比总结和常见问题解答,帮助读者更好地理解和配置MyBatis日志,需要的朋友可以参考下

一、单独使用 MyBatis(原生)如何开启日志

步骤 1:引入日志依赖(以 Log4j2 为例)

MyBatis 本身不包含日志实现,需自行引入。推荐使用 Log4j2SLF4J + Logback

Maven 依赖(Log4j2):

<dependencies>
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.13</version>
    </dependency>
 
    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
 
    <!-- Log4j2 核心 -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.20.0</version>
    </dependency>
 
    <!-- Log4j2 API -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.20.0</version>
    </dependency>
</dependencies>

不要引入 slf4j 相关依赖,避免日志桥接冲突(除非你明确使用 SLF4J)。

步骤 2:配置日志文件(log4j2.xml)

src/main/resources 下创建 log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
 
  <Loggers>
    <!-- 关键:将你的 Mapper 接口所在包设为 DEBUG 级别 -->
    <Logger name="com.example.mapper" level="debug" additivity="false">
      <AppenderRef ref="Console"/>
    </Logger>
 
    <Root level="info">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

✅ name="com.example.mapper" 必须替换为你实际的 Mapper 接口包路径!

步骤 3:确保 MyBatis 能识别日志实现

MyBatis 会自动探测已引入的日志框架。只要正确引入了 Log4j2 依赖,无需额外配置。

可选:强制指定日志实现(一般不需要)

System.setProperty("org.apache.ibatis.logging.LogFactory", 
                   "org.apache.ibatis.logging.log4j2.Log4j2Impl");

效果验证

运行以下代码:

try (SqlSession session = MyBatisUtil.openSession()) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = mapper.findById(1);
    System.out.println(user);
}

控制台将输出:

15:30:22.123 [main] DEBUG c.e.m.UserMapper.findById - ==>  Preparing: SELECT id, username, email FROM user WHERE id = ?
15:30:22.150 [main] DEBUG c.e.m.UserMapper.findById - ==> Parameters: 1(Integer)
15:30:22.180 [main] DEBUG c.e.m.UserMapper.findById - <==      Total: 1

二、Spring Boot 中如何开启 MyBatis 日志

Spring Boot 默认使用 SLF4J + Logback,配置极其简单。

步骤 1:确认依赖

确保已引入 mybatis-spring-boot-starter

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

该 starter 已自动引入 SLF4J 和 Spring Boot 日志支持。

步骤 2:配置 application.yml

application.yml 中设置 Mapper 接口包的日志级别为 debug

logging:
  level:
    # 替换为你的 Mapper 接口所在包
    com.example.mapper: debug

✅ 无需配置 logback.xml,除非有特殊格式需求。

效果验证

调用 Service 方法:

@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;
 
    @GetMapping("/user/{id}")
    public User getUser(@PathVariable Integer id) {
        return userMapper.findById(id); // 自动输出 SQL 日志
    }
}

控制台输出:

2025-11-20 15:40:00.123 DEBUG 12345 --- [nio-8080-exec-1] c.e.m.UserMapper.findById : ==>  Preparing: SELECT id, username, email FROM user WHERE id = ?
2025-11-20 15:40:00.150 DEBUG 12345 --- [nio-8080-exec-1] c.e.m.UserMapper.findById : ==> Parameters: 1(Integer)
2025-11-20 15:40:00.180 DEBUG 12345 --- [nio-8080-exec-1] c.e.m.UserMapper.findById : <==      Total: 1

三、对比总结

项目原生 MyBatisSpring Boot + MyBatis
日志框架需手动引入(Log4j2/Logback)自动使用 SLF4J + Logback
配置方式编写 log4j2.xml 或 logback.xml在 application.yml 中设置 logging.level
关键配置项<Logger name="mapper包路径" level="debug">logging.level.com.your.mapper=debug
是否需要额外代码否(依赖自动探测)
推荐场景独立工具、非 Spring 项目Web 应用、微服务

四、常见问题

Q1:为什么设置了日志级别还是看不到 SQL?

  • 检查包路径是否完全匹配(区分大小写)
  • 确认是 Mapper 接口的包路径,不是 XML 文件路径
  • 原生项目检查是否引入了正确的日志实现依赖

Q2:能否只打印 SQL 不打印结果?

可以,降低 ResultSetHandler 日志级别:

# Spring Boot
logging:
  level:
    com.example.mapper: debug
    org.apache.ibatis.executor.resultset: warn

Q3:生产环境是否应关闭?

强烈建议关闭

# application-prod.yml
logging:
  level:
    com.example.mapper: info  # 或 warn/error

避免性能损耗和敏感信息泄露。

结语

无论是原生 MyBatis 还是 Spring Boot 集成,开启 SQL 日志的核心都是:将 Mapper 接口所在包的日志级别设为 DEBUG

以上就是在MyBatis中开启SQL日志的具体步骤的详细内容,更多关于MyBatis开启SQL日志的资料请关注脚本之家其它相关文章!

相关文章

  • Java中@Autowired和@Resource区别

    Java中@Autowired和@Resource区别

    本文主要介绍了Java中@Autowired和@Resource区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 详解SpringBoot配置devtools实现热部署

    详解SpringBoot配置devtools实现热部署

    本篇文章主要介绍了详解SpringBoot配置devtools实现热部署 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 超详细解释Java反射

    超详细解释Java反射

    本文非常详细的讲解了java反射具体的内容以及使用,java反射在现今的使用中很频繁,希望此文可以帮大家解答疑惑,可以帮助大家理解
    2021-11-11
  • 如何修改json字符串中某个key对应的value值

    如何修改json字符串中某个key对应的value值

    这篇文章主要介绍了如何修改json字符串中某个key对应的value值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • ruoyi-springboot框架新增模块调接口报404的解决方案

    ruoyi-springboot框架新增模块调接口报404的解决方案

    这篇文章主要介绍了ruoyi-springboot框架新增模块调接口报404的解决方案,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • 如何使用Mockito调用静态方法和void方法

    如何使用Mockito调用静态方法和void方法

    这篇文章主要介绍了如何使用Mockito调用静态方法和void方法的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot整合Lombok及常见问题解决

    SpringBoot整合Lombok及常见问题解决

    本文主要介绍了SpringBoot整合Lombok及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Spring Cloud Eureka 搭建 & 集群方式

    Spring Cloud Eureka 搭建 & 集群方式

    这篇文章主要介绍了Spring Cloud Eureka 搭建 & 集群方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring Mybatis 基本使用过程(推荐)

    Spring Mybatis 基本使用过程(推荐)

    Mybatis是一个半自动ORM(Object Relational Mapping)框架,它可以简化数据库编程,让开发者更专注于SQL本身,本文给大家介绍Spring Mybatis 基本使用过程,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • JVM调试命令与调试工具详解

    JVM调试命令与调试工具详解

    JVM statistics Monitoring,用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,这篇文章主要介绍了JVM调试命令与调试工具,需要的朋友可以参考下
    2023-10-10

最新评论