接着就是考虑生成代码需要获取的信息,这些信息当然是最好保存在配置文件里,比如可以定义如下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的格式来定义表的结构,但相对来说难度稍微大了点,配置选项太多,所以只好简化很多东西,留下最基本的东西了。
自己定义好了配置文件和表信息文件的格式,接下来的工作就是读取配置文件--->获取数据表信息---->根据配置模板生成代码。