Java文件转换为Velocity模板原创
将Java文件转换为Velocity模板需要进行以下几个方面的修改
# 1. 文件扩展名
首先需要将文件扩展名从.java改为.java.vm,表示这是一个Velocity模板文件。
# 2. 替换静态内容为动态变量
需要将Java文件中的静态内容替换为Velocity变量和指令。根据当前仓库中的模板,常用的Velocity变量有:
- ${packageName} - 包名的基础部分
- ${moduleName} - 模块名称
- ${subpackageName} - 子包名
- ${entityName} - 实体类名称
- ${lowerFirstEntityName} - 首字母小写的实体类名称
- ${businessName} - 业务名称
- ${author} - 作者名称
- ${date} - 日期
- ${tableName} - 数据库表名
- ${fieldConfigs} - 字段配置列表
# 3. 添加条件判断和循环
使用Velocity的条件判断和循环指令来处理动态内容:
#if(条件)
// 条件成立时的内容
#else
// 条件不成立时的内容
#end
#foreach($item in $collection)
// 循环内容,可以使用$item访问当前项
#end
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 4. 具体示例
以下是一个具体的转换示例
# 原始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;
// 其他代码
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 转换后的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;
// 其他代码
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 5. 处理字段和属性
对于实体类中的字段和属性,需要使用#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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 6. 条件导入
根据实体类的字段类型,可能需要条件导入某些包:
#if(${hasLocalDateTime})
import java.time.LocalDateTime;
#end
#if(${hasBigDecimal})
import java.math.BigDecimal;
#end
1
2
3
4
5
6
2
3
4
5
6
# 7. 注意事项
- Velocity变量使用${变量名}格式
- Velocity指令使用#指令名格式
- 注意转义特殊字符,如$和#
- 使用$!{变量名}可以在变量为null时不输出任何内容
- 在模板中可以使用Velocity的内置函数,如$entityName.toLowerCase()