把 Preparing / Parameters 日志还原为可执行 SQL。

切换工具
粘贴 MyBatis 日志(含 Preparing / Parameters 行)。支持一次粘贴多组日志,每组单独生成可执行 SQL。
MyBatis 日志输入
可执行 SQL0 组

使用说明

用途

MyBatis 日志还原工具,把日志里分两行打印的 SQL(== Preparing == 一行 + == Parameters == 一行)合并还原为可直接执行的真实 SQL。把 ? 占位符按参数顺序替换为实际值,正确处理字符串引号、日期格式、null 值、特殊字符转义。常用于 MyBatis / MyBatis-Plus 项目的慢 SQL 排查、生产 bug 复现、SQL 性能测试。所有处理在浏览器本地完成,敏感数据库内容不上传。

操作步骤

  1. 粘贴 MyBatis 日志(含 ==> Preparing: 和 ==> Parameters: 两行)
  2. 工具自动识别 SQL 模板和参数列表
  3. 按顺序把 ? 替换为参数值(字符串自动加引号)
  4. 日期 / 时间参数按 SQL 标准格式输出(「2026-01-01 12:00:00」)
  5. 右侧输出可执行的完整 SQL
  6. 配合 sql-formatter 一键格式化阅读
  7. 支持批量:日志里多条 SQL 一次性还原
  8. 导出 .sql 文件供 DBeaver / Navicat 执行

常见问题

日志里 Parameters 显示 null(Integer) 怎么办?
MyBatis 日志的 Parameters 行格式是 `值1(类型1), 值2(类型2)`。本工具识别 null(Integer) 替换为 NULL(不带引号)。**注意**: 字符串 null 和 NULL 在 SQL 里语义不同,类型推断很重要。如果你只复制了 SQL 没复制类型标注,工具按"看起来像数字就 Integer,否则 String"启发式处理。
IN (?, ?, ?, ?, ?) 怎么处理?
IN 子句的多个 ? 按参数顺序逐个替换,所以 Parameters 行会有 N 个值。**注意**: MyBatis 的 foreach 拼 IN 时实际生成 IN (?, ?, ?, ...) N 个 ?。本工具按顺序对应替换,结果是 IN ('a', 'b', 'c', 'd', 'e')。
LIKE '%xxx%' 这种通配符会被破坏吗?
不会。LIKE 子句的 ? 替换时,参数值如果含 % _ 这种通配符,会原样保留(因为它本来就是 LIKE 模糊查询的语义)。**实际场景**: 用户名搜索 LIKE '%' || #{keyword} || '%',参数是 "tom",结果是 LIKE '%tom%'。
日期 / 时间参数格式不对怎么办?
日志里 Parameters 通常是 Java 的 LocalDateTime.toString() 格式(2026-01-01T12:00:00)。**本工具按 SQL 标准转**: 2026-01-01 12:00:00(T 换成空格)。MySQL / PostgreSQL 都接受这两种格式,但建议用 SQL 标准格式跨数据库通用。
为什么我的日志没有 Parameters 行?
MyBatis 默认日志只打印 SQL 模板,没打印参数。**开启参数日志**: log4j / logback 配置 `<logger name="com.your.mapper" level="DEBUG"/>` 或 application.properties: `logging.level.com.your.mapper=debug`。**生产环境**: 一般只开 INFO 级别(参数会很多很费日志空间),需要时临时开 DEBUG。

应用场景

  • 慢 SQL 排查:从慢日志拿到 MyBatis 日志,还原后用 EXPLAIN 分析
  • 生产 bug 复现:用户报错,从日志拿 SQL 在测试库重现
  • 性能测试:把生产 SQL 在测试库批量执行测吞吐
  • Code Review:复杂动态 SQL(foreach / if / where)拼出的实际效果
  • 学习理解:观察 MyBatis 动态 SQL 拼出来到底什么样

适用场景

慢 SQL 排查、生产 bug 复现、SQL 性能测试、动态 SQL Code Review、MyBatis 学习。Java 后端、DBA、性能工程师常用。批量处理、占位符智能识别、日期格式标准化、null 类型识别是关键差异点。