Arrow 一个自动化生成代码的工具
|
版本变更 |
||
|
1.0 |
2002-10-29 |
Fish |
| 1.0.0.1 | 2002-10-30 | Fish |
Java带给我们前所未有的开发体验,我们的开发更加灵活和清晰,代码的重用性和可扩展性更加的优秀。但是同时也增加了我们开发的复杂性和开发的周期。数据库的应用在现在仍然是项目开发中最常见的,如何使数据库的应用更加的迅速完成,如何将数据模型映射成java的类,这就是Arrow所要解决的。
相关文档 :
API 文档
下载Arrow包,是一个rar文件,解压缩后包括这么几个目录
build.xml 编译和运行example的ant脚本
l ant genjar 编译arrow
l ant testmenu 运行example , 生成的文件在./Examples/out目录下
/doc Arrow 的文档和Api doc
/lib Arrow将要用到的lib
l commons-beanutils.jar
l commons-collections.jar
l commons-logging.jar
l jakarta-oro-2.0.6.jar
l jalopy-1.0b8.jar 格式化代码API
l jdom.jar
l junit.jar
l log4j-1.2.7.jar
l velocity-1.3-rc1.jar Arrow的模版引擎
l w3cdom2.jar
l xalan.jar
l xerces.jar
/resource Arrow将要用到的配置文件和模版文件
l design.xml Arrow的定义文件,定义数据库表的信息
l datatype.xml Arrow的数据类型和java,数据库字段的类型对应
l /template 模版目录
ü DbObjectIteratorSourceTemplate.vm
ü DbObjectSourceFactoryTemplate.vm
ü DbObjectSourceTemplate.vm
ü ObjectSourceFactoryTemplate.vm
ü ObjectSourceTemplate.vm
/other 为了方面模版开发,我定义了utralEdit的高亮显示文件,如果需要,可以覆盖utralEdit中的这个文件即可
WORDFILE.TXT
/src Arrow源代码
/examples
/out 例子文件的输出目录
/menu 例子文件的运行环境和Junit测试脚本
本质上说Arrow就是根据配置文件来自动生成java的代码,这个配置文件中需要描述的仅仅是数据库中表的一些信息。例1 描述了一个简单的配置文件
|
<?xml version="1.0" encoding="gb2312"?> <entitygroup> <entity package="com.huahang.tj.app" name="menu" desc="菜单" allowadd="true" allowdel="true" allowupdate="true" factory="true"> <field name="menu_id" type="long" length="10" isnull="no" desc="菜单编号"/> <field name="menu_name" type="string" length="20" isnull="no" desc="菜单名称"/> <field name="menu_desc" type="string" length="200" isnull="no" desc="菜单描述"/> <field name="menu_link" type="string" length="1000" isnull="yes" desc="菜单的连接"/> <field name="seq" type="long" length="5" isnull="yes" desc="菜单显示的顺序"/> <key name="menu_id" sequence="true"/> </entity> </entitygroup> 例1是一个菜单表的信息 |
Arrow 执行后会生成5个文件他们是,遵循jive的bean的模式,他们是Menu.java , MenuFactory.java , DbMenu.java , DbMenuFactory.java
这几个bean可以完成对Menu表的增加,删除,修改,查询等工作。例如我们想要创建一个新的Menu我们可以这么写:
|
String menu_name = "testmenuname"; String menu_desc = "testmenudesc"; String menu_link = "testmenulink"; long seqid = 1;
MenuFactory mf = MenuFactory.getInstance(); Menu menu = null; try { menu = mf.createMenu(menu_name, menu_desc, menu_link, seqid); } catch (Exception e) { } 例2 创建menu |
在Arrow的配置文件中还可以定义表间的关系,执行后会生成对应的对象的关系
|
<relations> </relations> 例3 定义关系 |
生成的代码后除了在例2中的5个文件外还会多出Menuopt.java , DbMenuopt.java , DbMenuoptIterator.java . 当我们要为一个menu 增加子menu时,
我们可以使用下面的代码
|
MenuFactory mf = MenuFactory.getInstance(); } catch (Exception e) { 例4 创建子菜单 |
为了实现例2 的代码,我们需要什么呢?
MenuFactory.java , 这个类有一个getInstance的方法,返回是一个MenuFactory 对象,这个主要实现了Factory的模式,实际返回的是DbMenuFactory的一个实例,下面的创建菜单等操作,是在DbMenuFactory中实现的。
首先看一下MenuFactory的getInstance方法
|
private static MenuFactory factory =
null;
public static MenuFactory getInstance() { 例5 MenuFactory.java |
这是由Arrow生成的代码,功能是创建了一个DbMenuFactory的实例,那么Arrow是如何生成这段代码的呢?下面来看一下模版
|
##-----------------------------------------------------------
public static ${managername}Factory getInstance(){ 例5 MenuFactory模版 |