谈一下代码生成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值