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

   首先是数据表和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的格式来定义表的结构,但相对来说难度稍微大了点,配置选项太多,所以只好简化很多东西,留下最基本的东西了。

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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值