每次写了存储过程后都要写一堆类似的调用存储过程的java方法,各位有没有这样的感想?
代码生成器最基本要解决两个问题,第一,如何获取数据(数据表,存储过程的参数或者自定义模型);第二,获取了数据以后如何生成字符串(通常用模板引擎)。
这一篇文章将现学现用,探讨如何导入freemaker,如何解析一个模板,如何编写模板(模板语法),如何通过ide获得智能提示(没错,这一点是码农都希望有的),并且编写一个符合自己心意的封装了(封装freemaker的常用操作)。
这一篇文章有讲到:
http://sishuok.com/forum/posts/list/5154.html
下面我将已经编写的辅助类及结果贴上来。
【模板引擎辅助类】
package Easis.ViewEngine;
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.StringWriter;
import java.util.Map;
public class FreemarkerHelper {
private Configuration _tplConfig=new Configuration();
/**
* @param tplRoot 当前的模板存放目录,譬如:/tpl,请注意,设置模版的文件夹路径,本人在src下新建了一个ftl文件夹
configuration.setClassForTemplateLoading(this.getClass(),"/ftl");
* */
public FreemarkerHelper(String tplRoot){
_tplConfig.setClassForTemplateLoading(this.getClass(),tplRoot);
}
public String parseTemplate(String tplName,String encoding,Map<String,Object> paras){
try{
StringWriter swriter=new StringWriter();
Template mytpl=_tplConfig.getTemplate(tplName,encoding);
mytpl.process(paras,swriter);
return swriter.toString();
}
catch (Exception e){
e.printStackTrace();
return e.toString();
}
}
public String parseTemplate(String tplName,Map<String,Object> paras){
return this.parseTemplate(tplName,"utf-8",paras);
}
}
【测试用模板---放在src下面的/tpl/test.ftl】
你好:${username}
【使用方式】
package TestCase;
import Easis.ViewEngine.FreemarkerHelper;
import freemarker.template.Configuration;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class testFreemarker {
public static void main(String[] args){
FreemarkerHelper viewEngine=new FreemarkerHelper("/tpl");
Map<String,Object> paras=new HashMap<String, Object>();
paras.put("username","欸你好吗?");
String theres=viewEngine.parseTemplate("test.ftl",paras);
System.out.println(theres);
}
}
【结果】
ok,那么下一步就是编写一个自动生成访问存储过程代码的程序了。