每次写了存储过程后都要写一堆类似的调用存储过程的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); } }
你好:${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,那么下一步就是编写一个自动生成访问存储过程代码的程序了。