目录
[1. 基础模板示例](#1. 基础模板示例)
[2. Java代码渲染](#2. Java代码渲染)
[1. 变量定义与使用](#1. 变量定义与使用)
[2. 对象操作](#2. 对象操作)
[3. 循环控制](#3. 循环控制)
[4. 条件判断](#4. 条件判断)
[1. 实体类模板改造(集成Lombok)](#1. 实体类模板改造(集成Lombok))
[2. Controller模板改造(集成Swagger)](#2. Controller模板改造(集成Swagger))
本文介绍了Java模板引擎Velocity的基础概念和核心语法。Velocity可实现界面与代码分离,常用于Web内容生成、代码生成、SQL脚本等场景。文章首先展示了基础模板示例和Java渲染代码,然后详细讲解了变量定义、对象操作、循环控制和条件判断等核心语法。最后通过实体类模板和Controller模板的实战案例,展示了如何集成Lombok和Swagger进行代码生成。全文涵盖了Velocity从基础到应用的关键知识点,为开发者提供了实用的技术参考。
一、Velocity基础概念
Velocity是基于Java的模板引擎,实现界面与代码分离,主要应用场景:
-
Web内容动态生成
-
Java源代码生成
-
SQL脚本生成
-
XML配置文件生成
-
网页静态化
二、Velocity快速入门
1. 基础模板示例
html
<!DOCTYPE html>
<html>
<body>
<h3>动态内容:${message}</h3>
</body>
</html>
2. Java代码渲染
java
public class VelocityDemo {
public static void main(String[] args) throws Exception {
// 初始化模板引擎
VelocityInitializer.initVelocity();
// 准备数据模型
VelocityContext context = new VelocityContext();
context.put("message", "动态内容示例");
// 读取并渲染模板
Template template = Velocity.getTemplate("vm/template.html.vm", "UTF-8");
FileWriter writer = new FileWriter("output.html");
template.merge(context, writer);
writer.close();
}
}
三、Velocity核心语法
1. 变量定义与使用
java
velocity
## 定义变量
#set($name = "velocity")
## 使用变量
变量值:${name}
简写形式:$name
## 字符串拼接
#set($service = "order")
${service}Service ## 输出:orderService
2. 对象操作
java
velocity
## 对象属性访问
区域ID:$region.id
区域名称:${region.regionName}
3. 循环控制
java
velocity
## 集合遍历
#set($seasons = ["春", "夏", "秋", "冬"])
#foreach($item in $seasons)
序号[$foreach.count] $item
#end
## 对象集合遍历
#foreach($region in $regionList)
区域ID:$region.id,名称:$region.regionName
#end
4. 条件判断
java
velocity
## if-else判断
#set($score = 85)
#if($score >= 80)
优秀
#elseif($score >= 60)
及格
#else
不及格
#end
## 对象空值判断
#if($obj)
对象存在
#end
#if(!$obj)
对象为空
#end
四、代码生成模板实战
1. 实体类模板改造(集成Lombok)
java
velocity
package ${packageName}.domain;
#foreach ($import in $importList)
import ${import};
#end
import com.example.common.annotation.Excel;
import com.example.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* ${functionName}对象 ${tableName}
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ${ClassName} extends BaseEntity {
private static final long serialVersionUID = 1L;
#foreach ($column in $columns)
#if(!$table.isSuperColumn($column.javaField))
/** $column.columnComment */
#if($column.list)
@Excel(name = "${column.columnComment}")
#end
private $column.javaType $column.javaField;
#end
#end
#if($table.sub)
private List<${subClassName}> ${subclassName}List;
#end
}
2. Controller模板改造(集成Swagger)
java
velocity
package ${packageName}.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@Api(tags = "${functionName}Controller")
@RestController
@RequestMapping("/${moduleName}/${businessName}")
public class ${ClassName}Controller extends BaseController {
@ApiOperation("查询${functionName}列表")
@PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")
@GetMapping("/list")
public TableDataInfo list(${ClassName} ${className}) {
startPage();
List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
return getDataTable(list);
}
@ApiOperation("获取${functionName}详细信息")
@PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')")
@GetMapping(value = "/{${pkColumn.javaField}}")
public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) {
return success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));
}
}