于是就郁闷了。 要求半个月交活, 项目组里人全被调走了,也没个帮手, 自己年后清闲惯了,一下眼见这么多体力劳动真的很想放弃。。。这时哪怕有个实习生兄弟在身边都成了救世主。
硬着头皮做了两个模块发现这个项目业务太简单了, 而且开发起来是有规律的, 包结构和名称规范好,有了表名完全可以按照某种约定来生成代码。
于是百度了一下velocity和freemaker, 还是觉得velocity简单,适合这个形势, 花了大概10分钟搭个helloworld就可以开发了, 10分钟上手确实不是velocity吹出来的。
然后定义规则, 我这里是dao daoimpl , service serviceimpl , model, action , list.jsp, view.jsp, update.jsp, delete.jsp ;有共性的基本上就这么一套了, 结构还是比较原始, 什么service dao之类的也都用上了, 为了多熟悉熟悉velocity多写几个模板来练手。
具体过程就是
1. 想好规范, 每个包名、类名、结构、属性名称、大小写等等。。 一时想不全开发时也能发现了。
2. 写velocity模板
3.生成文件
4.可以写个界面方便使用一下之类的
至于velocity如何生成代码, 举个例子
vm文件:
package com.xxx.model; /** * $className * @author xxx */ public class $className { #foreach($key in $columns.keySet()) #set($type = "String") #if($columns.get($key) == "DATE") #set($type = "java.util.Date") #elseif($columns.get($key) == "VARCHAR2") #set($type = "java.lang.String") #elseif($columns.get($key) == "NUMBER") #set($type = "java.lang.Integer") #end #set($s = $key.substring(0, 1).toUpperCase() + $key.substring(1)) private $type $key; public $type get$s() { return $key; } public void set$s($type $key) { this.$key=$key; } #end }
java代码
Map<String,String> columns = new HashMap<String,String>(); //1接收表名 String tableName = request.getParameter("tablename"); //2将表字段信息存入缓存 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@x.x.x.x:1521:xxx","xxx","xxx"); DatabaseMetaData dmd = conn.getMetaData(); String sql = "select * from user_tab_columns t where t.TABLE_NAME = '"+tableName+"'"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ columns.put(rs.getString("COLUMN_NAME"), rs.getString("DATA_TYPE")); } StringWriter writer = new StringWriter(); try { VelocityEngine ve = new VelocityEngine(); Properties p = new Properties(); p.setProperty(Velocity.INPUT_ENCODING, "UTF-8"); p.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8"); p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); ve.init(p); Template t = ve.getTemplate("vm/action.vm"); VelocityContext context = new VelocityContext(); context.put("columns",columns); context.put("modelName", tableName); t.merge(context, writer);
这个只是个demo
时间有限而且没怎么研究velocity ,代码很多都是网上现成的, 扫一下就行了, 不建议多看。。