我想知道,使用 .vm 模板文件的 easycode 自定义代码生成模板,怎么去除表名工程前缀
时间: 2025-06-17 16:13:32 浏览: 18
<think>好的,我现在需要帮助用户解决如何在EasyCode的自定义代码生成模板中使用.vm文件去除表名的工程前缀。首先,我需要回忆一下用户之前的问题,他之前已经询问过.vm文件的基本知识以及如何修改模板,比如MyBatis的例子。现在他的具体需求是去除表名的工程前缀,可能在使用EasyCode时遇到了表名前缀的问题,导致生成的类名带有不需要的前缀。
首先,我需要确认用户使用的工具是EasyCode,这是一个常用于IDEA的代码生成插件,它支持Velocity模板。用户的问题核心在于处理表名前缀,例如表名可能是“sys_user”,而用户希望生成的类名是“User”而不是“SysUser”。
接下来,我需要思考在Velocity模板中如何截取字符串。根据之前提供的例子,用户已经知道可以使用replaceAll方法,比如replaceAll("^Sys", "")来去除前缀。但这里可能需要更通用的方法,因为不同的用户可能有不同的前缀,比如“tb_”、“app_”等。
可能需要分步骤来处理:
1. **获取原始表名**:通常,在模板中可以通过类似$table.getClassName()的方法获取表对应的类名,但可能这个类名已经被转换过,比如下划线转驼峰。需要确认用户是直接处理表名还是处理已经转换后的类名。
2. **确定前缀规则**:用户可能需要去除的是特定前缀,比如“sys_”,或者动态去除前缀。例如,所有表名都以“proj_”开头,需要去除这个部分。
3. **字符串处理**:在Velocity中,可以使用字符串的replaceAll方法,或者substring等。例如,如果前缀是固定的三个字符,可以用substring(3),但更灵活的是用正则表达式替换,比如replaceAll("^前缀", "")。
但用户可能不知道具体如何应用到EasyCode的模板中,所以需要给出具体的示例。例如,在生成类名的位置,插入处理逻辑。
另外,需要注意EasyCode的模板结构,可能不同的模板文件对应不同的生成部分,比如entity、dao、service等,所以需要指导用户在正确的模板文件中进行修改。
可能还需要考虑表名是否有前缀,但类名生成时自动添加了其他内容,比如有些生成器会自动将表名的前缀转换为模块名,这时候可能需要更复杂的处理。
另外,用户可能需要确认表名的获取方式,是否在EasyCode中有特定的变量或方法来获取原始表名,或者处理后的类名。例如,在之前的例子中,使用$table.getClassName(),可能需要查看EasyCode的文档,确认可用的变量。
最后,需要给出具体的步骤,例如:
- 定位到生成类名的模板文件,通常是entity.java.vm或者类似的。
- 在该文件中找到类名定义的位置,插入变量处理逻辑,使用replaceAll去除前缀。
- 测试修改后的模板,生成代码确认是否生效。
同时,提醒用户修改模板后需要重新生成代码,可能需要清理之前的生成文件,避免缓存问题。
总结来说,回答需要包括以下几个部分:
1. 确定模板位置:找到生成类名的模板文件。
2. 修改变量处理:使用字符串替换方法去除前缀。
3. 示例代码:展示具体的.vm代码修改。
4. 注意事项:比如清理缓存,重新生成等。
需要确保回答清晰,步骤明确,用户能够按照指导操作。</think>━━━━━━━━━━━━━━━━━━━━
**通过5个步骤实现表名前缀剥离(以`sys_`前缀为例):**
**STEP 1:定位模板文件**
在IDEA项目中找到EasyCode模板目录:
`Settings → Editor → File and Code Templates → EasyCode`
聚焦核心模板:`entity.java.vm`(实体类模板)或`mapper.java.vm`(DAO层模板)
**STEP 2:注入前缀处理逻辑**
在模板头部添加VTL变量处理代码(正则表达式剥离):
```velocity
## 原始表名:$table.obj.name → 例如 sys_user
## 移除前缀后的纯净表名(支持正则表达式)
#set($pureTableName = $table.obj.name.replaceAll("^sys_",""))
## 转换为驼峰类名(EasyCode内置方法)
#set($className = $tool.getClassName($pureTableName, $table.obj.name))
```
`$tool.getClassName()` 是EasyCode自带的表名转驼峰工具方法
**STEP 3:修改类名引用**
将原有`${className}`替换为处理后的变量:
```java
public class ${className} { // 自动生成如 User 而非 SysUser
//...
}
```
**STEP 4:动态前缀配置(进阶)**
若需适配不同前缀(如`tb_`/`app_`),可通过配置文件注入:
```velocity
## 读取generatorConfig.xml中配置的前缀规则
#set($prefixPattern = "^" + $table.getPrefix() + "_")
#set($pureTableName = $table.obj.name.replaceAll($prefixPattern, ""))
```
**STEP 5:清理历史生成文件**
在IDEA中执行:
`mvn clean` 或手动删除`target/generated-sources`目录
重新运行EasyCode生成代码
━━━━━━━━━━━━━━━━━━━━
**避坑指南**
1. **正则表达式验证**:使用在线工具(如regex101.com)测试`^sys_`是否能精准匹配目标前缀
2. **多级前缀处理**:若存在`sys_base_user`这类多段前缀,改用`replaceAll("^sys_.*?_", "")`
3. **日志调试**:在模板中添加`## DEBUG: raw=$table.obj.name → pure=$pureTableName`输出处理过程
**效果对比**
| 原始表名 | 处理后类名 |
|--------------|-------------|
| sys_user | User |
| tb_order | Order |
| app_customer | Customer |
阅读全文
相关推荐














