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")
);
}