将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
    

注意事项

  1. Velocity变量使用${变量名}格式
  2. Velocity指令使用#指令名格式
  3. 注意转义特殊字符,如$和#
  4. 使用$!{变量名}可以在变量为null时不输出任何内容
  5. 在模板中可以使用Velocity的内置函数,如$entityName.toLowerCase()

声明

作者: liyao

版权:本博客所有文章除特别声明外,均采用CCBY-NC-SA4.O许可协议。转载请注明!

最后更新于 2026-02-18 18:09 history