mybatis-plus
配置项 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
的作用是将 MyBatis 的 SQL 日志直接输出到控制台,方便开发调试时实时查看执行的 SQL 语句、参数和结果。这是一个轻量级的日志实现,无需额外依赖日志框架(如 Log4j、SLF4J)。
作用详解:
- 输出 SQL 语句:将 MyBatis 执行的 SQL 语句(包含动态参数占位符
?
)打印到控制台。 - 输出参数值:显示 SQL 中每个占位符
?
对应的实际参数值。 - 输出结果行数:显示 SQL 影响的行数或查询返回的记录数。
- 开箱即用:无需配置复杂的日志框架,适合快速调试。
实例演示:
步骤 1:在配置文件中启用配置 (以 application.yml
为例)
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 关键配置
步骤 2:执行一个查询操作
假设有一个查询用户的方法:
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 继承 BaseMapper 的 selectById 方法
}
// 调用查询
User user = userMapper.selectById(1L);
步骤 3:控制台输出日志
执行代码后,控制台会打印如下日志:
==> Preparing: SELECT id,name,email,age FROM user WHERE id=?
==> Parameters: 1(Long)
<== Columns: id, name, email, age
<== Row: 1, Jack, jack@example.com, 30
<== Total: 1
日志解析:
输出内容 | 说明 |
---|---|
==> Preparing: ... |
实际执行的 SQL 语句(? 是参数占位符) |
==> Parameters: 1(Long) |
SQL 参数值(参数 1 ,类型为 Long ) |
<== Columns: ... |
查询返回的字段名 |
<== Row: ... |
查询返回的一行数据 |
<== Total: 1 |
查询结果总行数(此处返回 1 行) |
生产环境注意事项:
- 性能影响:频繁输出日志会影响性能,生产环境建议关闭或改用文件日志(如
SLF4J
)。 - 敏感信息:日志可能暴露敏感数据(如参数值),需做好脱敏处理。
- 替代方案:生产环境推荐使用标准日志框架(配置示例):
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl # 使用 SLF4J
对比其他日志实现:
配置值 | 特点 | 适用场景 |
---|---|---|
org.apache.ibatis.logging.stdout.StdOutImpl |
直接打印到控制台,简单直接 | 本地调试 |
org.apache.ibatis.logging.slf4j.Slf4jImpl |
集成 SLF4J,可输出到文件/网络 | 生产环境 |
org.apache.ibatis.logging.nologging.NoLoggingImpl |
关闭所有 MyBatis 日志 | 性能要求极高的场景 |
提示:在开发阶段使用
StdOutImpl
能极大提升调试效率,是排查 SQL 问题的利器。