最近 review 同事提交的代码,看到一段 MyBatis 里的 SQL 写成了一整行:
SELECT t.id, t.user_id, t.name, t.color, t.sort_order, t.status, t.create_time, t.update_time FROM user_note_tag t INNER JOIN user_note_tag_rel r ON r.tag_id = t.id WHERE r.note_id = #{noteId} AND t.status = 1 ORDER BY t.sort_order ASC, t.create_time DESC虽然能跑,但排查问题的时候看着头疼。我想把它格式化一下再看逻辑,手头又没有趁手的 IDE 插件,就顺手找了个在线 SQL 格式化工具。
几种格式化方式对比
平时整理 SQL,我一般考虑三种方案:
1. 手动格式化
优点:完全可控,想怎么排怎么排。
缺点:慢,容易出错,特别是字段多、JOIN 多的时候,手动加换行和缩进很烦。
2. IDE 插件
优点:集成在开发环境里,顺手。
缺点:不是每个环境都有配置好的插件;临时看一段别人发来的 SQL 时,可能不想为了格式化专门打开 IDE。
3. 在线工具
优点:零配置,打开浏览器就能用;支持复制粘贴,适合临时处理。
缺点:需要把 SQL 贴到网页上,敏感 SQL 不建议用。
这次我用的就是第三种,工具派上的 SQL 格式化:
实测效果
把上面那段单行 SQL 贴进去,工具自动做了格式化:
格式化后结构清晰多了:
SELECT
t.id,
t.user_id,
t.name,
t.color,
t.sort_order,
t.status,
t.create_time,
t.update_time
FROM user_note_tag t
INNER JOIN user_note_tag_rel r ON r.tag_id = t.id
WHERE r.note_id = #{noteId}
AND t.status = 1
ORDER BY t.sort_order ASC, t.create_time DESCSELECT、FROM、JOIN、WHERE、ORDER BY 各占一行,字段和条件都有缩进。这样再看逻辑,一眼就能找到 JOIN 条件和过滤条件。
几个使用场景
我觉得在线 SQL 格式化在以下几种情况特别省事:
- 看别人提交的一行 SQL,想快速理解结构;
- 在服务器上查日志,复制出来的 SQL 没有换行;
- 写文档或者发技术讨论帖,需要把 SQL 排得整齐一点;
- 临时没有 IDE,又需要格式化 SQL。
注意事项
在线工具虽然方便,但有几个点要注意:
- 敏感 SQL 不要上传:涉及用户数据、密码、内部业务逻辑的 SQL,尽量用本地工具处理。
- 格式化后检查语义:大部分格式化工具不会改变 SQL 语义,但复杂 SQL 格式化后建议跑一下确认。
- 参数占位符保留:这次测试的
#{noteId}被完整保留,没有异常转换。
总结
SQL 格式化不是难事,但选择合适的工具能省不少时间。对于日常开发中的普通 SQL,在线格式化工具是一个轻量且有效的选择。我这次用的是工具派上的 SQL 格式化,效果够用,操作也简单。
相关工具:https://gjupai.com/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。