如何在IntelliJ中批量合并Spring Boot项目的SQL插入脚本?
在IntelliJ Ultimate中批量合并SQL INSERT语句的自动化方案
针对你需要批量处理100多个SQL测试文件,合并Main与Extension表INSERT语句的需求,IntelliJ Ultimate提供了几种无需多光标或宏的自动化方案,比编写外部Python脚本更贴合IDE工作流:
1. 结构搜索替换(Structural Search and Replace, SSR)
这是处理结构化文本替换最可靠的内置工具,能忽略格式差异精准匹配SQL语句结构:
- 打开路径:
Edit → Find → Replace Structurally - 定义搜索模板:分别匹配成对的Main和Extension INSERT语句,通过主键变量关联两者(假设关联字段为
id和main_id):- Main表INSERT模板:
INSERT INTO main (id, $mainCols$) VALUES ($id$, $mainVals$); - Extension表INSERT模板(需设置
$id$变量与Main模板匹配):INSERT INTO extension (main_id, extension_col_a) VALUES ($id$, $extVal$);
- Main表INSERT模板:
- 创建替换模板:合并为包含
extension_col_a的Main表INSERT:INSERT INTO main (id, $mainCols$, extension_col_a) VALUES ($id$, $mainVals$, $extVal$); - 先在单个文件测试匹配结果,确认无误后,通过
Find in Path选择所有目标SQL文件,批量执行替换。
2. IDE内置脚本控制台(Groovy脚本)
如果需要更灵活的逻辑处理格式差异,可以直接在IntelliJ中编写Groovy脚本批量处理文件:
- 打开脚本控制台:
Tools → Script Console → Groovy - 编写脚本遍历目标目录下的SQL文件,匹配并合并INSERT语句(示例逻辑):
def targetDir = new File("src/test/resources/sql") // 替换为你的SQL文件目录 targetDir.eachFileRecurse { file -> if (file.name.endsWith(".sql")) { def content = file.getText("UTF-8") // 正则匹配成对的Main和Extension INSERT,适配格式差异 def regex = /INSERT INTO main\s*\((.*?)\)\s*VALUES\s*\((.*?)\);\s*INSERT INTO extension\s*\((.*?)\)\s*VALUES\s*\((.*?),(.*?)\);/ def updatedContent = content.replaceAll(regex) { match, mainCols, mainVals, _, mainId, extVal -> def newCols = "$mainCols, extension_col_a" def newVals = "$mainVals, $extVal" "INSERT INTO main ($newCols) VALUES ($newVals);" } file.write(updatedContent, "UTF-8") } } - 运行脚本即可批量完成替换,无需离开IDE,还能根据实际格式调整正则逻辑。
3. File Watchers(可选,用于后续自动处理)
如果后续还会新增类似SQL文件,可配置File Watcher自动触发处理:
- 打开配置:
Settings → Tools → File Watchers - 添加新Watcher,选择脚本类型(Groovy或Python),设置触发条件为文件保存,关联你的处理脚本,实现新增文件自动合并。
如果已经熟悉Python,外部脚本当然也能实现,但IntelliJ的内置方案更集成化,无需切换工具,且SSR能基于SQL语法结构匹配,比纯正则更稳定。
内容的提问来源于stack exchange,提问作者peer
相关产品推荐
相关产品推荐

