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

本文介绍了一种用于自动生成代码的工具配置方法,包括如何将数据库表结构映射到Java类,以及如何通过配置文件定义生成代码的类型,如Java类、SQL脚本等。
   首先是数据表和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的格式来定义表的结构,但相对来说难度稍微大了点,配置选项太多,所以只好简化很多东西,留下最基本的东西了。

    自己定义好了配置文件和表信息文件的格式,接下来的工作就是读取配置文件--->获取数据表信息---->根据配置模板生成代码。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值