您的位置:首页 > 其它

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

2014-01-23 12:50 225 查看
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")

    );

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: