簡介
Velocity爲基於模版引擎,可以用於從模板生成SQL,PostScript和XML等文件。
- VelocityEngine: velocity的引擎
- Template:模版,這裏添加vm模版
- VelocityContext:添加模版中的數據
- StringWriter:將Template和Context結合生成的爲string數據。
- FileWriter:將StringWriter生成的String輸出到文件中
Velocity使用
添加依賴
在pom.xml中添加Velocity依賴
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
創建vm模版文件
在resource目錄下創建vm目錄,然後在vm目錄中創建Demo.java.vm
變量用${字段名}表示velocity語法教程
##首字母大寫
#macro(upperCase $field)
$field.toUpperCase().substring(0,1)$field.substring(1)##
#end
package ${package};
/**
* ${comment}
*
* @author ${author}
* @email ${email}
* @date ${datetime}
*/
public class ${className} {
#foreach(${field} in ${fields})
/**
* ${field.comment}
*/
private ${field.attrType} ${field.attrName};
#end
#foreach(${field} in ${fields})
public void set#upperCase($field.attrName)(${field.attrType} ${field.attrName}){
this.${field.attrName} = ${field.attrName};
}
public ${field.attrType} get#upperCase($field.attrName)(){
return this.${field.attrName};
}
#end
}
創建Field類
public class Field {
private String comment;
private String attrType;
private String attrName;
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getAttrType() {
return attrType;
}
public void setAttrType(String attrType) {
this.attrType = attrType;
}
public String getAttrName() {
return attrName;
}
public void setAttrName(String attrName) {
this.attrName = attrName;
}
}
生成主類
public class VelocityGenerate {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) throws IOException {
VelocityEngine ve = new VelocityEngine();//velocity的引擎
ve.setProperty(RuntimeConstants.RESOURCE_LOADER,"classpath");
ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
ve.init();
Template template = ve.getTemplate("vm/Demo.java.vm");//模版,生成代碼關鍵類
List<Field> fields = new ArrayList<>();
for (int i = 0; i < 3; i++) {
Field field = new Field();
field.setComment("備註field"+i);
field.setAttrName("field"+i);
field.setAttrType("String");
fields.add(field);
}
VelocityContext vc = new VelocityContext();//用於添加模版中的數據
vc.put("author","author");
vc.put("email","[email protected]");
vc.put("datetime",sdf.format(new Date()));
vc.put("package","com.zcxshare.generate.velocity");
vc.put("comment","Demo類");
vc.put("className","Demo");
vc.put("fields",fields);
StringWriter sw = new StringWriter();//輸出代碼類
template.merge(vc,sw);
String r = sw.toString();
System.out.println(r);
File file = new File("C:/Users/Administrator/Desktop" + "/Demo.java");
FileWriter fileWriter = new FileWriter(file);
fileWriter.append(r);
fileWriter.flush();
fileWriter.close();
}
}
生成的類
package com.zcxshare.generate.velocity;
/**
* Demo類
*
* @author author
* @email [email protected]
* @date 2020-03-05 18:16:10
*/
public class Demo {
/**
* 備註field0
*/
private String field0;
/**
* 備註field1
*/
private String field1;
/**
* 備註field2
*/
private String field2;
public void setField0(String field0){
this.field0 = field0;
}
public String getField0(){
return this.field0;
}
public void setField1(String field1){
this.field1 = field1;
}
public String getField1(){
return this.field1;
}
public void setField2(String field2){
this.field2 = field2;
}
public String getField2(){
return this.field2;
}
}
可以嘗試生成一些文件,比如Dao、Service、ServiceImpl、Controller層等類