怎么在IDEA中配置MyBatis Log插件_控制台打印完整SQL语句

风静君_3959

风静君_3959

2026-03-21

1199人浏览

原创

mybatis log 插件不显示sql的主因是日志级别未设为debug或mybatis未实际执行sql;需确认logging.level.org.apache.ibatis和org.apache.ibatis.logging.jdbc均为debug,且排除二级缓存命中、executor类型异常及日志框架冲突。

怎么在idea中配置mybatis log插件_控制台打印完整sql语句

MyBatis Log 插件不显示 SQL?先确认日志级别和 MyBatis 版本匹配

插件本身不改日志配置,它只是“劫持” MyBatis 的 org.apache.ibatis.logging.Log 实现并重写输出逻辑。如果控制台没 SQL,大概率是 MyBatis 根本没走日志打印路径——比如你用的是 MyBatis 3.4+,但项目里还残留了旧版 log4j.properties 把 org.apache.ibatis 设成了 ERROR 级别。

  • 检查 IDEA 控制台是否真有 MyBatis 启动日志(如 Creating a new SqlSession),没有说明 MyBatis 没加载成功
  • 确保 logging.level.org.apache.ibatis=DEBUG(Spring Boot)或对应 logback/log4j 配置中该包为 DEBUG
  • MyBatis 3.4.0+ 默认使用 slf4j,插件只对 StdOutImpl 和部分桥接器生效;若你手动指定了 logImpl=SLF4J,插件会失效

插件装了但只打印 ? 占位符,没替换真实参数

这是最常被误认为“插件坏了”的情况。MyBatis Log 插件本身不解析 PreparedStatement 参数,它依赖 MyBatis 自身的 org.apache.ibatis.logging.jdbc.PreparedStatementLogger 输出带参数的 SQL。而这个 logger 只在 MyBatis 日志级别为 DEBUG 且执行语句时才触发。

  • 必须保证 org.apache.ibatis.logging.jdbc.BaseJdbcLogger 所在包也设为 DEBUG(例如 Spring Boot 下加 logging.level.org.apache.ibatis.logging.jdbc=DEBUG)
  • SQL 中的 #{} 会被替换,但 ${} 是字符串拼接,插件无法还原,看到原样 ${xxx} 属正常
  • 批量操作(foreach)或动态 SQL 多层嵌套时,插件可能只捕获最外层语句,内部 if 分支的 SQL 不会单独打印

IntelliJ IDEA 中启用插件后 SQL 还是乱码或截断

根本原因不是插件问题,而是 IDEA 控制台编码或缓冲区限制。MyBatis Log 插件输出的是纯文本,但长 SQL(尤其含中文、JSON 字段)容易被截断或显示为 。

Idea Spark
Idea Spark

根据用户提供的领域或兴趣生成项目创意。当用户询问项目想法、寻求灵感、说“应该做什么项目”或“给我点想法”等时使用。

下载
  • 在 IDEA → Help → Edit Custom Properties 中添加:console.encoding=UTF-8,重启 IDEA
  • 运行配置里勾选 Use soft wraps in console,避免超长 SQL 溢出看不见
  • 如果 SQL 超过 2000 字符,IDEA 控制台默认只保留最后 1000 行;可在 Settings → Editor → General → Console 中调高 Override console cycle buffer size(建议设为 20000)

为什么有些 SQL 完全不出现?重点查 Executor 类型和缓存开关

MyBatis Log 插件监听的是 StatementHandler 和 Executor 的日志调用,但以下场景它根本收不到信号:

  • 启用了二级缓存(cacheEnabled=true)且命中时,SQL 根本不进 JDBC 层,插件无从捕获
  • 用了 REUSE 或 BATCH 类型的 Executor,部分日志被合并或跳过;开发阶段建议强制用 SIMPLE(<setting name="defaultExecutorType" value="SIMPLE"></setting>)
  • 手写了 SqlSessionTemplate 或自定义 Interceptor,绕过了标准执行链路,插件监听点失效

插件能工作的前提是:SQL 真的执行到了 JDBC 层,并且 MyBatis 主动调用了日志接口。任何跳过 PreparedStatementLogger 或提前返回的路径,插件都看不到。

相关文章

全能打印神器
全能打印神器

全能打印神器是一款非常好用的打印软件,可以在电脑、手机、平板电脑等设备上使用。支持无线打印和云打印,操作非常简单,使用起来也非常方便,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

idea

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mybatis一级缓存和二级缓存
mybatis一级缓存和二级缓存

在MyBatis中,一级缓存和二级缓存是两种不同级别的缓存机制,它们都可以用来提高性能。本专题提供mybatis一级缓存和二级缓存相关文章,大家可以免费阅读。

2023.08.21

583

4

ibatis和mybatis有什么区别
ibatis和mybatis有什么区别

ibatis和mybatis的区别:1、基本信息不同;2、开发时间不同;3、功能与易用性;4、配置文件;5、入参类型与出参类型;6、返回结果集接受方式;7、语法差异;8、数据库方言支持;9、插件支持;10、社区活跃度;11、全球化支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

2662

5

mybatis如何配置数据库连接
mybatis如何配置数据库连接

mybatis配置数据库连接的方法:1、指定数据源;2、配置事务管理器;3、配置类型处理器和映射器;4、使用环境元素;5、配置别名。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

446

5

mybatis工作原理及流程是什么
mybatis工作原理及流程是什么

mybatis工作原理及流程:1、配置文件;2、接口与映射;3、sql解析与生成;4、执行计划;5、结果处理;6、动态sql;7、缓存机制;8、插件;9、事务管理;10、日志与监控;11、扩展性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

292

4

hibernate和mybatis有哪些区别
hibernate和mybatis有哪些区别

hibernate和mybatis的区别:1、实现方式;2、性能;3、对象管理的对比;4、缓存机制。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

302

5

Java MyBatis框架
Java MyBatis框架

本专题专注于Java主流ORM框架MyBatis的应用,系统讲解SQL映射、动态SQL、结果映射、分页查询、缓存机制与多表关联等核心内容,并结合企业管理系统、电商平台和后台管理项目实战,帮助学员全面掌握高效的数据库持久层开发技能。

2025.08.26

5949

22

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

20

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

20

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程