本页导航
article
Java文件转换为Velocity模板
AI摘要
本文介绍了将Java文件转换为Velocity模板的具体步骤。核心要点包括:将文件扩展名改为.java.vm;将静态内容替换为Velocity变量(如${packageName}、${entityName}等)和指令;使用条件判断和循环处理动态内容;并注意变量格式、特殊字符转义等事项。转换旨在通过模板动态生成代码,提升开发效率。
将Java文件转换为Velocity模板需要进行以下几个方面的修改
文件扩展名
首先需要将文件扩展名从.java改为.java.vm,表示这是一个Velocity模板文件。
替换静态内容为动态变量
需要将Java文件中的静态内容替换为Velocity变量和指令。根据当前仓库中的模板,常用的Velocity变量有:
- ${packageName} - 包名的基础部分
- ${moduleName} - 模块名称
- ${subpackageName} - 子包名
- ${entityName} - 实体类名称
- ${lowerFirstEntityName} - 首字母小写的实体类名称
- ${businessName} - 业务名称
- ${author} - 作者名称
- ${date} - 日期
- ${tableName} - 数据库表名
- ${fieldConfigs} - 字段配置列表
添加条件判断和循环
使用Velocity的条件判断和循环指令来处理动态内容:
#if(条件)
// 条件成立时的内容
#else
// 条件不成立时的内容
#end
#foreach($item in $collection)
// 循环内容,可以使用$item访问当前项
#end
具体示例
以下是一个具体的转换示例
原始Java文件:
package com.example.project.controller;
import com.example.project.entity.User;
import com.example.project.service.UserService;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
@RequestMapping("/user")
public class UserController {
private UserService userService;
// 其他代码
}
转换后的Velocity模板:
package ${packageName}.${moduleName}.controller;
import ${packageName}.${moduleName}.model.entity.${entityName};
import ${packageName}.${moduleName}.service.${entityName}
Service;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
@RequestMapping("/${lowerFirstEntityName}")
public class ${entityName}Controller {
private ${entityName}Service ${lowerFirstEntityName}Service;
// 其他代码
}
处理字段和属性
对于实体类中的字段和属性,需要使用#foreach循环遍历${fieldConfigs},如当前仓库中的entity.java.vm模板所示:
#foreach($fieldConfig in ${fieldConfigs})
#if(!$fieldConfig.fieldName.equals("id") && !$fieldConfig.
fieldName.equals("createTime") && !$fieldConfig.fieldName.
equals("updateTime")&& !$fieldConfig.fieldName.equals
("isDelete"))
#if("$!fieldConfig.fieldComment" != "")
/**
* ${fieldConfig.fieldComment}
*/
#end
private ${fieldConfig.fieldType} ${fieldConfig.fieldName};
#end
#end
条件导入
根据实体类的字段类型,可能需要条件导入某些包:
#if(${hasLocalDateTime})
import java.time.LocalDateTime;
#end
#if(${hasBigDecimal})
import java.math.BigDecimal;
#end
注意事项
- Velocity变量使用${变量名}格式
- Velocity指令使用#指令名格式
- 注意转义特殊字符,如$和#
- 使用$!{变量名}可以在变量为null时不输出任何内容
- 在模板中可以使用Velocity的内置函数,如$entityName.toLowerCase()
最后更新于 2026-02-18 18:09