自做代码生成器(二)规则格式定义
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的格式来定义表的结构,但相对来说难度稍微大了点,配置选项太多,所以只好简化很多东西,留下最基本的东西了。
自己定义好了配置文件和表信息文件的格式,接下来的工作就是读取配置文件--->获取数据表信息---->根据配置模板生成代码。
接着就是考虑生成代码需要获取的信息,这些信息当然是最好保存在配置文件里,比如可以定义如下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的格式来定义表的结构,但相对来说难度稍微大了点,配置选项太多,所以只好简化很多东西,留下最基本的东西了。
自己定义好了配置文件和表信息文件的格式,接下来的工作就是读取配置文件--->获取数据表信息---->根据配置模板生成代码。
相关文章推荐
- opencv学习(四)头文件申明/main函数格式定义/程序(变量)命名规则/printf函数
- 在 mysql 中 定义 数据库,表,列时,设定的各个的编码格式。
- caffe 实战系列:proto文件格式以及含义解析:如何定义网络,如何设置网络参数(以AlexNet为例)
- 数据绑定、验证规则和输出格式控制集成
- RPC远程服务id定义规则
- Newtonsoft.Json设置日期格式定义
- SkBitmap.h 中应该定义了几种位图的格式
- 正则表达式2 定义规则
- 将 “ 引用 ” 作为函数返回值类型的格式、好处和需要遵守的规则
- RTMP协议中的AMF0格式定义
- 利用TextArea 定义不同的显示颜色或者显示格式
- jqGrid 中的editrules来自定义colModel验证规则
- json的定义、标准格式及json字符串检验
- Endnote 参考文献输出格式GB/T 7714的Style定义写法
- java函数定义的格式与练习
- 软件项目版本号的命名规则及格式介绍
- 常见流行视频格式定义及特点全面详解
- 函数的定义格式
- css的定义及运行规则
- 定义员工类employee ,员工有姓名,年龄,工号属性, 员工有工作的方法, 键盘录入三组数据, 数据格式(姓名,年龄,工号) 例如:张三,23,9527; 通过数据,创建员工对象, 然后通过对