Velocity生成代碼Demo

簡介

Velocity爲基於模版引擎,可以用於從模板生成SQL,PostScript和XML等文件。

  1. VelocityEngine: velocity的引擎
  2. Template:模版,這裏添加vm模版
  3. VelocityContext:添加模版中的數據
  4. StringWriter:將Template和Context結合生成的爲string數據。
  5. 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層等類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章