您的位置:首页 > 编程语言

自做代码生成器(二)规则格式定义

2006-08-03 18:45 204 查看
首先是数据表和java类之间的转换规则,数据库以oracle举例,我一般的命名方式是这样,表的名字是 表前缀_表含义 这种,比如手机杂志项目有个文章表,表的名字就叫做magazine_article,而类的名字就叫做MagazineArticle,字段也是一样,比如有个字段叫做article_title,相应的变量名就是articleTitle。当然这些规则以后是可以手动修改的。
接着就是考虑生成代码需要获取的信息,这些信息当然是最好保存在配置文件里,比如可以定义如下xml文件:

<?xml version="1.0" encoding="GB2312"?>
<auto-coder comment="代码生成器配置文件">
<file-path comment="生成代码保存的路径">gen</file-path>
<database comment="数据库配置">
<driver>oracle.jdbc.driver.OracleDriver</driver>
<url>jdbc:oracle:thin:@192.168.0.186:1521:testdb</url>
<username>wap</username>
<password>a123</password>
<dbflag comment="是否从数据库读取">false</dbflag>
</database>
<templates comment="单个数据表模板">
<template>
<template-type>java</template-type>
<template-file>dao.vm</template-file>
<java-package></java-package>
<class-name>CLASSNAMEDAO.xml</class-name>
</template>
</templates>

<table-templates comment="多个数据表模板">
<template>
<template-type>other</template-type>
<template-file>create.vm</template-file>
<java-package></java-package>
<class-name>create.sql</class-name>
</template>
</table-templates>
<table-file comment="要生成的数据表文件">tables.txt</table-file>
</auto-coder>

由于我们想要生成的不仅仅java代码,还可能是建表sql,配置文件等待,所以这里设定了两种模板,一种是一个数据表对应一个生成文件的模板,另外一种是所有数据表对应一个生成文件的模板。利用第一个模板,我们可以生成数据类、数据访问类等等代码,而利用第二个模板,可以生成建表语句、struts或者webwork的配置文件等等。

数据库的属性里面有一项是“dbflag”,表示是否从数据库读取数据,这里默认,如果这项是true,则从数据库获取相应的字段信息,一般我用它来生成数据库结构对应的xml文件。如果这项是false,则从tables/xxx.xml文件中获取数据表的各种信息,我大多数是首先用读数据库的方式生成相应的数据库表结构的xml文件,接着修改生成的xml文件,比如加入注释等,然后再根据这些xml文件来生成代码和建表的sql语句。

数据表的xml文件定义也是自己定义的,生成xml文件的模板是这样:

<?xml version="1.0" encoding="GB2312"?>
<table>
<name>$table.TableName</name>
<class-name>$table.TableClassName</class-name>
<short-name>$table.TableShortName</short-name>
<display>$table.TableClassName</display>
<fields>
##各个字段
#set ($fields = $table.getTableFields())
#set ($pks = $table.getPrimaryKeys())
#foreach($field in $fields)
<field>
<label>$field.FieldClassName</label>
<name>$field.FieldName</name>
<class-name>$field.FieldClassName</class-name>
<type>$field.FieldType</type>
<class-type>$field.FieldClassType</class-type>
<length>$field.FieldLen</length>
<null>$field.FieldNull</null>
<readonly>$field.ReadOnly</readonly>
<form-type>text</form-type>
</field>
#end
</fields>
<pks>
#foreach($pk in $pks)
<pk>
<name>$pk.FieldName</name>
</pk>
#end
</pks>
</table>

其实完全可以利用hibernate的格式来定义表的结构,但相对来说难度稍微大了点,配置选项太多,所以只好简化很多东西,留下最基本的东西了。

自己定义好了配置文件和表信息文件的格式,接下来的工作就是读取配置文件--->获取数据表信息---->根据配置模板生成代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: