✅ 一句话核心
MyBatis 本身不实现日志,而是通过日志工厂适配你项目中已有的日志框架(如 SLF4J、Log4j 等),用于输出 SQL 语句、参数、结果等,方便调试。
🔧 日志工厂支持的实现(按优先级自动探测)
MyBatis 启动时会按以下顺序自动查找日志实现(找到即停):
- SLF4J(最推荐,现代项目标配)
- Apache Commons Logging
- Log4j2
- Log4j
- JDK logging(java.util.logging)
- NO_LOGGING(关闭日志)
💡 如果你用 Spring Boot,默认集成 SLF4J + Logback,MyBatis 会自动使用它。
🛠 如何开启 SQL 日志?
方法一:在 mybatis-config.xml 中显式指定(可选)
xml
<settings>
<setting name="logImpl" value="SLF4J"/>
</settings>
MyBatis 没有"自带"的日志实现(除了 STDOUT),它不用引入任何依赖
常用值:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、NO_LOGGING
方法二:什么都不配(推荐)
只要 classpath 里有 SLF4J 或 Log4j,MyBatis 会自动用------无需配置。
🔍 日志能看什么?(开发必备)
开启后,控制台会输出:
log
==> Preparing: SELECT * FROM user WHERE id = ?
==> Parameters: 1(Integer)
<== Columns: id, user_name, email
<== Row: 1, 张三, zhangsan@example.com
<== Total: 1
- 执行的 SQL
- 绑定的参数(防注入,显示
?替代) - 返回结果行数
⚠️ 大厂避坑指南
-
不要用
System.out.println调试 SQL → 用日志! -
生产环境保留 SQL 日志开关 :通过日志级别(如
debug)控制,避免性能损耗。yaml# Spring Boot application.yml logging: level: com.your.mapper: debug -
如果看不到日志:
- 检查是否引入了日志依赖(如
slf4j-api+logback-classic) - 检查日志级别是否为
DEBUG(MyBatis 日志是DEBUG级别)
- 检查是否引入了日志依赖(如
✅ 总结
| 问题 | 答案 |
|---|---|
| MyBatis 用什么打日志? | 适配你项目已有的日志框架(优先 SLF4J) |
| 需要手动配置吗? | 一般不用,除非你想强制指定 |
| 如何看到 SQL? | 确保日志级别为 DEBUG,Mapper 包路径开 debug |
| 生产能开吗? | 可以,但建议按需开启(通过日志配置动态控制) |
💡 记住:SQL 日志 = 开发效率神器,但靠日志级别管控,不是硬编码。
需要我给你一个 Spring Boot 下完整开启 MyBatis SQL 日志的配置示例吗?