在MyBatis中開啟SQL日志的具體步驟
一、單獨(dú)使用 MyBatis(原生)如何開啟日志
步驟 1:引入日志依賴(以 Log4j2 為例)
MyBatis 本身不包含日志實(shí)現(xiàn),需自行引入。推薦使用 Log4j2 或 SLF4J + Logback。
Maven 依賴(Log4j2):
<dependencies>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<!-- MySQL 驅(qū)動(dòng) -->
<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相關(guān)依賴,避免日志橋接沖突(除非你明確使用 SLF4J)。
步驟 2:配置日志文件(log4j2.xml)
在 src/main/resources 下創(chuàng)建 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>
<!-- 關(guān)鍵:將你的 Mapper 接口所在包設(shè)為 DEBUG 級(jí)別 -->
<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" 必須替換為你實(shí)際的 Mapper 接口包路徑!
步驟 3:確保 MyBatis 能識(shí)別日志實(shí)現(xiàn)
MyBatis 會(huì)自動(dòng)探測(cè)已引入的日志框架。只要正確引入了 Log4j2 依賴,無需額外配置。
可選:強(qiáng)制指定日志實(shí)現(xiàn)(一般不需要)
System.setProperty("org.apache.ibatis.logging.LogFactory",
"org.apache.ibatis.logging.log4j2.Log4j2Impl");效果驗(yàn)證
運(yùn)行以下代碼:
try (SqlSession session = MyBatisUtil.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.findById(1);
System.out.println(user);
}控制臺(tái)將輸出:
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 默認(rèn)使用 SLF4J + Logback,配置極其簡(jiǎn)單。
步驟 1:確認(rèn)依賴
確保已引入 mybatis-spring-boot-starter:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>該 starter 已自動(dòng)引入 SLF4J 和 Spring Boot 日志支持。
步驟 2:配置 application.yml
在 application.yml 中設(shè)置 Mapper 接口包的日志級(jí)別為 debug:
logging:
level:
# 替換為你的 Mapper 接口所在包
com.example.mapper: debug? 無需配置 logback.xml,除非有特殊格式需求。
效果驗(yàn)證
調(diào)用 Service 方法:
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/user/{id}")
public User getUser(@PathVariable Integer id) {
return userMapper.findById(id); // 自動(dòng)輸出 SQL 日志
}
}控制臺(tái)輸出:
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
三、對(duì)比總結(jié)
| 項(xiàng)目 | 原生 MyBatis | Spring Boot + MyBatis |
|---|---|---|
| 日志框架 | 需手動(dòng)引入(Log4j2/Logback) | 自動(dòng)使用 SLF4J + Logback |
| 配置方式 | 編寫 log4j2.xml 或 logback.xml | 在 application.yml 中設(shè)置 logging.level |
| 關(guān)鍵配置項(xiàng) | <Logger name="mapper包路徑" level="debug"> | logging.level.com.your.mapper=debug |
| 是否需要額外代碼 | 否(依賴自動(dòng)探測(cè)) | 否 |
| 推薦場(chǎng)景 | 獨(dú)立工具、非 Spring 項(xiàng)目 | Web 應(yīng)用、微服務(wù) |
四、常見問題
Q1:為什么設(shè)置了日志級(jí)別還是看不到 SQL?
- 檢查包路徑是否完全匹配(區(qū)分大小寫)
- 確認(rèn)是 Mapper 接口的包路徑,不是 XML 文件路徑
- 原生項(xiàng)目檢查是否引入了正確的日志實(shí)現(xiàn)依賴
Q2:能否只打印 SQL 不打印結(jié)果?
可以,降低 ResultSetHandler 日志級(jí)別:
# Spring Boot
logging:
level:
com.example.mapper: debug
org.apache.ibatis.executor.resultset: warnQ3:生產(chǎn)環(huán)境是否應(yīng)關(guān)閉?
強(qiáng)烈建議關(guān)閉:
# application-prod.yml
logging:
level:
com.example.mapper: info # 或 warn/error避免性能損耗和敏感信息泄露。
結(jié)語(yǔ)
無論是原生 MyBatis 還是 Spring Boot 集成,開啟 SQL 日志的核心都是:將 Mapper 接口所在包的日志級(jí)別設(shè)為 DEBUG。
以上就是在MyBatis中開啟SQL日志的具體步驟的詳細(xì)內(nèi)容,更多關(guān)于MyBatis開啟SQL日志的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java中@Autowired和@Resource區(qū)別
本文主要介紹了Java中@Autowired和@Resource區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
詳解SpringBoot配置devtools實(shí)現(xiàn)熱部署
本篇文章主要介紹了詳解SpringBoot配置devtools實(shí)現(xiàn)熱部署 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
如何修改json字符串中某個(gè)key對(duì)應(yīng)的value值
這篇文章主要介紹了如何修改json字符串中某個(gè)key對(duì)應(yīng)的value值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
ruoyi-springboot框架新增模塊調(diào)接口報(bào)404的解決方案
這篇文章主要介紹了ruoyi-springboot框架新增模塊調(diào)接口報(bào)404的解決方案,文中通過代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03
如何使用Mockito調(diào)用靜態(tài)方法和void方法
這篇文章主要介紹了如何使用Mockito調(diào)用靜態(tài)方法和void方法的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

