首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

路一下代码生成

2012-07-29 
谈一下代码生成前阵子搞个小项目,虽然很简单,全都是增删改查,但是数据表还是非常之多的。于是就郁闷了。 要

谈一下代码生成
    前阵子搞个小项目,虽然很简单,全都是增删改查,但是数据表还是非常之多的。
于是就郁闷了。 要求半个月交活, 项目组里人全被调走了,也没个帮手, 自己年后清闲惯了,一下眼见这么多体力劳动真的很想放弃。。。这时哪怕有个实习生兄弟在身边都成了救世主。

    硬着头皮做了两个模块发现这个项目业务太简单了, 而且开发起来是有规律的, 包结构和名称规范好,有了表名完全可以按照某种约定来生成代码。

    于是百度了一下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 ,代码很多都是网上现成的, 扫一下就行了, 不建议多看。。

热点排行