用FreeMaker和模板生成文件的方法

来源:互联网 发布:太子奶集团销售数据 编辑:程序博客网 时间:2024/06/17 04:49

FreeMarker是用Java开发的模板引擎,利用这个类库可以利用自定义的模板文件(*.ftl文本文件)生成一个新的文本文件。例如,利用数据库中的表,自动生成DAO文件和与之对应的Domain文件,就可以用FreeMaker来做。

首先,从http://freemarker.org/下载FreeMaker,下载的地址:http://sourceforge.net/projects/freemarker/files/freemarker/2.3.20/freemarker-2.3.20.tar.gz/download

下载的压缩文件中freemaker.jar就是需要的类库文件。

新建一个Java Application项目,将freemaker.jar加入项目的库中。

建立一个模板文件,例如在E:\temp下新建dao.ftl,内容如下:

 private static ${domainname} mapData(ResultSet resultSet) throws SQLException {
     return new ${domainname}(
         resultSet.get${idtype}("id"),
         <#assign index = 0>
         <#list fieldnames as field>
         resultSet.get${fieldtypes[field]}("${field}")<#if field_has_next>,</#if>
         <#assign index = index+1>
         </#list>
    );
  }

新建一个Java类:DAOGenerator.java

public class DAOGenerator {


    public static void generate() throws Exception {        

     freemarker.template.Configuration cfg;

        cfg = new freemarker.template.Configuration();
        cfg.setDirectoryForTemplateLoading(new File("e:/temp"));


        Map root = new HashMap();
        List<String> fieldnames = new ArrayList<>();
        Map fieldtypes = new HashMap();
       

        root.put("domainname", "User");
        root.put("idtype",  "Long");

        fieldnames.add("username");
        fieldtypes.put("username","String");

        fieldnames.add("password");
        fieldtypes.put("password","String");
                
        fieldnames.add("email");
        fieldtypes.put("email","String");

        fieldnames.add("age");
        fieldtypes.put("age","Short");        

        root.put("fieldnames", fieldnames);
        root.put("fieldtypes", fieldtypes);


        String path =  "E:/temp/dao/UserDao.java";
        new File(path).delete();
        
        Template t = getCfg().getTemplate("dao.ftl");
        Writer out = new OutputStreamWriter(new FileOutputStream(path), "UTF-8");
        t.process(root, out);
        System.out.println("Finish the work");


    }
}


得到的结果:

private static User mapData(ResultSet resultSet) throws SQLException {
     return new User(
         resultSet.getLong("id"),
         resultSet.getString("username"),
         resultSet.getString("password"),
         resultSet.getString("email"),
         resultSet.getShort("age")
    );

}

0 0
原创粉丝点击