You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取TM_FILENAME_BASE的部分?编写仓库接口代码片段需求咨询

解决方法:从文件名自动提取实体名生成仓库接口

嘿,我之前刚好折腾过类似的代码片段配置,完全能实现你想要的效果!核心就是对TM_FILENAME_BASE变量做正则替换,把IFooRepository里的Foo提取出来,然后在模板里复用。下面分常用编辑器给你具体讲:

VS Code 代码片段配置

VS Code的代码片段是JSON格式,你可以通过文件 > 首选项 > 用户代码片段创建全局或工作区的代码片段文件。这里是一个现成的可直接用的模板:

{
  "Repository Interface Template": {
    "prefix": "repo-interface",
    "body": [
      "public interface ${TM_FILENAME_BASE} {",
      "    /**",
      "     * 保存${TM_FILENAME_BASE/(^I)(.*)(Repository$)/$2/}实体",
      "     */",
      "    void save(${TM_FILENAME_BASE/(^I)(.*)(Repository$)/$2/} entity);",
      "",
      "    /**",
      "     * 根据ID查询${TM_FILENAME_BASE/(^I)(.*)(Repository$)/$2/}",
      "     */",
      "    ${TM_FILENAME_BASE/(^I)(.*)(Repository$)/$2/} findById(Long id);",
      "",
      "    /**",
      "     * 查询所有${TM_FILENAME_BASE/(^I)(.*)(Repository$)/$2/}实体",
      "     */",
      "    List<${TM_FILENAME_BASE/(^I)(.*)(Repository$)/$2/}> findAll();",
      "",
      "    /**",
      "     * 根据ID删除${TM_FILENAME_BASE/(^I)(.*)(Repository$)/$2/}",
      "     */",
      "    void delete(Long id);",
      "}"
    ],
    "description": "快速生成符合I[Entity]Repository命名规范的仓库接口"
  }
}

正则替换说明

这里的关键是${TM_FILENAME_BASE/(^I)(.*)(Repository$)/$2/}:

  • (^I):匹配文件名开头的大写I
  • (.*):捕获中间的实体名(比如Foo),这是我们要复用的核心部分
  • (Repository$):匹配文件名结尾的Repository
  • $2:用第二个捕获组(也就是中间的实体名)替换整个变量值

Sublime Text 代码片段配置

如果用Sublime Text,原理完全一样,只是语法稍有不同。创建一个.sublime-snippet文件,内容如下:

<snippet>
    <content><![CDATA[
public interface ${TM_FILENAME_BASE} {
    /**
     * 保存${TM_FILENAME_BASE/^I(.*)Repository$/$1/}实体
     */
    void save(${TM_FILENAME_BASE/^I(.*)Repository$/$1/} entity);

    /**
     * 根据ID查询${TM_FILENAME_BASE/^I(.*)Repository$/$1/}
     */
    ${TM_FILENAME_BASE/^I(.*)Repository$/$1/} findById(Long id);

    /**
     * 查询所有${TM_FILENAME_BASE/^I(.*)Repository$/$1/}实体
     */
    List<${TM_FILENAME_BASE/^I(.*)Repository$/$1/}> findAll();

    /**
     * 根据ID删除${TM_FILENAME_BASE/^I(.*)Repository$/$1/}
     */
    void delete(Long id);
}
]]></content>
    <tabTrigger>repo-interface</tabTrigger>
    <scope>source.java</scope>
    <description>Generate repository interface from filename</description>
</snippet>

灵活调整正则适配不同命名规则

如果你的文件名规则有变化(比如不带开头的I,是FooRepository这种格式),只需要修改正则:

  • 改成${TM_FILENAME_BASE/(.*)Repository$/$1/}就能精准提取出Foo

只要文件名严格遵循固定的命名规范,这个方法就能自动把实体名填充到模板的各个位置啦!

内容的提问来源于stack exchange,提问作者James Chadwick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:52:57