跳到主要内容

Velocity模版引擎

官网:https://velocity.apache.org/index.html

Velocity 是一个基于Java的模版引擎。它允许web 页面设计者引用JAVA代码预定义的方法。Web 设计者可以根据MVC模式和JAVA程序员并行工作,这意味着Web设计者可以单独专注于设计良好的站点,而程序员则可单独专注于编写底层代码。Velocity 将Java 代码从web页面中分离出来,使站点在长时间运行后仍然具有很好的可维护性,并提供了一个除JSP和PHP之外的可行的被选方案。

Velocity可用来从模板产生web 页面,SQL, PostScript以及其他输出。他也可用于一个独立的程序以产生源代码和报告,或者作为其它系统的一个集成组件。这个项目完成后,Velocity将为Turbine web 应用程序框架提供模板服务。Velocity+Turbine 方案提供的模板服务将允许web 应用按真正的mvc模式进行开发。

https://juejin.cn/post/7258847745526513724

https://blog.csdn.net/chang_mao/article/details/135955608

基本使用

导入相关依赖:

    <dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>

<dependency>
<groupId>org.apache.velocity.tools</groupId>
<artifactId>velocity-tools-generic</artifactId>
<version>3.1</version>
</dependency>

编写模版:

image-20240724223657820

生成代码:

public class Test {
public static void main(String[] args) throws IOException {
//设置velocity资源加载器
Properties prop = new Properties();
prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
Velocity.init(prop);
//创建Velocity容器
VelocityContext context = new VelocityContext();
context.put("cxk", "zhangsan");
//加载模板
Template tpl = Velocity.getTemplate("vms/test.java.vm", "UTF-8");
FileWriter fw = new FileWriter("/Users/houyunfei/code/my-github-project/codegenie/codegenie-backend/src/main/resources/vms/test.java");
//合并数据到模板
tpl.merge(context, fw);
//释放资源
fw.close();
}
}

基本语法:

  1. 注释:## 注释内容

  2. 变量引用:${name},如果不存在,会展示原样,如果不想展示,可以使用${!name}

  3. 方法引用:${变量名.方法},例如${str.split(" ")}

  4. 指令:

    1. 定义变量:#set($变量=值)

    2. 判断:

      #if(判断条件)
      .........
      #elseif(判断条件)
      .........
      #else
      .........
      #end
    3. 循环:内置属性:$foreach.index

      #foreach($item in $items)
      ..........
      [#break]
      #end
    4. 引入资源(不被解析):#include(resource)

    5. 引入资源(解析):#parse(resource)

    6. 定义重用模块:

      #define($模块名称)
      模块内容
      #end
    7. 动态计算:#evalute("计算语句")

    8. 宏指令:

      #macro(宏名 [$arg]?)
      .....
      #end
      调用:
      #宏名([$arg]?)