`
weitd
  • 浏览: 144945 次
  • 性别: Icon_minigender_1
  • 来自: 新都
社区版块
存档分类
最新评论

FreeMarker应用一例——生成Java代码(转)

 
阅读更多
对FreeMarker而言,无非是“Template + data-model = output”。

这里,假设我们所要生成的Java代码,即“output”如下:
package com.cs.qdog.swift.objects;

public class F32B {

    private Double amount;
    private String currency;

    public Double getAmount() {
        return amount;
    }

    public void setAmount(Double amount) {
        this.amount = amount;
    }

    public String getCurrency() {
        return currency;
    }

    public void setCurrency(String currency) {
        this.currency = currency;
    }
}

 


其中,类名、属性都属于“data-model”,其可用树形结构表现如下:

(root)

|

+- class = “F32B”

|

|- properties

|   |

|   +- currency

|   |   |

|   |   +- name = “currency”

|   |   |

|   |   +- type = “String”

|   |

|   +- amount

|   |   |

|   |   +- name = “amount”

|   |   |

|   |   +- type = “Double”

那么,则可使用如下“Template”:
package com.cs.qdog.swift.objects;

public class ${class} {

  <#list properties as prop>
    private ${prop.type} ${prop.name};
  </#list>

  <#list properties as prop>
    public ${prop.type} get${prop.name?cap_first}(){
      return ${prop.name};
    }
    public void set${prop.name?cap_first}(${prop.type} ${prop.name}){
      this.${prop.name} = ${prop.name};
    }
  </#list>


}

 





最后,将FreeMarker文档中的例子改动一下,测试生成“output”的Java程序如下:
package com.cs.qdog.swift.objects;

import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class GenObjects {

    public static void main(String[] args) throws IOException,
            TemplateException {

        /* ------------------------------------------------------------------- */
        /* You usually do it only once in the whole application life-cycle: */

        /* Create and adjust the configuration */
        Configuration cfg = new Configuration();
        cfg.setDirectoryForTemplateLoading(new File(
                "D:/Temp/EclipseWorkSpace/GenSwiftFields/templates"));
        cfg.setObjectWrapper(new DefaultObjectWrapper());

        /* ------------------------------------------------------------------- */
        /* You usually do these for many times in the application life-cycle: */

        /* Get or create a template */
        Template temp = cfg.getTemplate("SwiftFieldClass.ftl");

        /* Create a data-model */
        Map<String, Object> root = new HashMap<String, Object>();
        root.put("class", "F32B");
        Collection<Map<String, String>> properties = new HashSet<Map<String, String>>();
        root.put("properties", properties);

        /* subfield 1: currency */
        Map<String, String> currency = new HashMap<String, String>();
        currency.put("name", "currency");
        currency.put("type", "String");
        properties.add(currency);

        /* subfield 2: amount */
        Map<String, String> amount = new HashMap<String, String>();
        amount.put("name", "amount");
        amount.put("type", "Double");
        properties.add(amount);

        /* Merge data-model with template */
        Writer out = new OutputStreamWriter(System.out);
        temp.process(root, out);
        out.flush();
    }

}
分享到:
评论
1 楼 zhoucanji 2016-11-20  
楼主的示例不错,本人亲试可以

相关推荐

    java生成word

    此外,还可以使用另一个库——FreeMarker,它是一个模板引擎,可以结合XML模板来生成Word文档,这种方式适合大量重复内容的生成,或者需要动态数据填充的场景。 总结来说,Java生成Word文档主要依靠Apache POI库,...

    customizing powerdesigner

    以自动生成Java实体类为例,我们可以编写一个插件,从PowerDesigner的模型中读取表结构,然后生成对应的Java Bean代码。这个过程中,我们需要解析模型中的对象,获取表名、字段名、数据类型等信息,再利用Java的模板...

    图书商城系统设计与实现 Java课程设计

    总之,"图书商城系统设计与实现——Java课程设计"是一个全面的实战项目,涵盖了Web开发的多个重要环节,对学习和理解JavaWeb技术有着极高的价值。通过实际操作,开发者能深入理解Web应用的开发流程,提高自己的技术...

    guayun.rar

    一个典型的SpringBoot项目通常包含以下部分:pom.xml(Maven项目对象模型,管理依赖)、src/main/java(源代码目录)、src/main/resources(资源文件目录)等。项目的主类,即启动点,通常会包含@SpringBoot...

    springboot176基于Spring Boot的装饰工程管理系统.zip

    本系统以"springboot176基于Spring Boot的装饰工程管理系统"为例,深入解析如何利用Spring Boot构建一个完整的管理信息系统。 一、Spring Boot基础 Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用...

Global site tag (gtag.js) - Google Analytics