自做代码生成器(四)举例实践

   我们先定义一个数据表的xml文件,比如系统用户的表system_user,定义的xml文件如下:

system_user.xml

<?xml version="1.0" encoding="GB2312"?>
<table>
 <name>system_user</name>
 <class-name>SystemUser</class-name>
 <short-name>systemUser</short-name>
 <display>系统用户</display>
 <fields>
  <field>
   <label>用户名</label>
   <name>user_name</name>
   <class-name>userName</class-name>
   <type>VARCHAR2</type>
   <class-type>String</class-type>
   <length>20</length>
   <null>0</null>
   <readonly>false</readonly>
   <form-type>text</form-type>
  </field>
  <field>
   <label>密码</label>
   <name>user_password</name>
   <class-name>userPassword</class-name>
   <type>VARCHAR2</type>
   <class-type>String</class-type>
   <length>20</length>
   <null>0</null>
   <readonly>false</readonly>
   <form-type>text</form-type>
  </field>
  <field>
   <label>用户姓名</label>
   <name>user_realname</name>
   <class-name>userRealName</class-name>
   <type>VARCHAR2</type>
   <class-type>String</class-type>
   <length>50</length>
   <null>0</null>
   <readonly>false</readonly>
   <form-type>text</form-type>
  </field>
 </fields>
 <pks>
  <pk>
   <name>user_name</name>
  </pk>
 </pks>
</table>

    这个文件的生成其实可以做成有界面配置的,速度会快一些,只是有些懒所以还没做出来,所以还是得手写了。

    定义好这个数据表,我们先要生成sql语句,生成sql语句的模板文件如下:

create_table.vm

##创建表的SQL语句
#foreach ($table in $list)
##各个字段
#set ($fields = $table.getTableFields())
#set ($pks = $table.getPrimaryKeys())
/*
 创建数据表$table.TableName.toUpperCase()
*/
CREATE TABLE $table.TableName.toUpperCase()
(
#foreach ($field in $fields)
 $field.FieldName.toUpperCase() $field.FieldType.toUpperCase()#if($field.FieldType.toUpperCase().equals("NUMBER") || $field.FieldType.toUpperCase().equals("VARCHAR2") || $field.FieldType.toUpperCase().equals("CHAR"))($field.FieldLen)#end#if($field.FieldNull == 0) NOT NULL#end,  -- $field.FieldLabel
#end
 CONSTRAINT PK_$table.TableName.toUpperCase() PRIMARY KEY (#set($c=0)#foreach($pk in $pks)#if($c!=0),#set($c=1)#end$pk.FieldName.toUpperCase()#end)
);
#foreach($field in $fields)
COMMENT ON COLUMN ${table.TableName.toUpperCase()}.$field.FieldName.toUpperCase() IS '$field.FieldLabel';
#end

#end

#foreach($table in $object)
#set ($fields = $table.getTableFields())
#set ($pks = $table.getPrimaryKeys())
#foreach ($field in $fields)
#if(!$field.FieldSeq.equals(""))
CREATE SEQUENCE $table.TableName.toUpperCase()_SEQ;
#end
#end
#end

    接着需要编写创建sql文件的配置文件:

make_sql.xml

<?xml version="1.0" encoding="GB2312"?>
<auto-coder comment="代码生成器配置文件,创建数据表以及生成java代码">
 <file-path comment="生成代码保存的路径">code/sql</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="单个数据表模板">
 </templates>
 <table-templates comment="多个数据表模板">
  <template comment="生成建表SQL">
   <template-type>other</template-type>
   <template-file>templates/create_table.vm</template-file>
   <java-package></java-package>
   <class-name>create_table.sql</class-name>
  </template> 
 </table-templates>
 <table-file comment="要生成的数据表文件">tables.txt</table-file>
</auto-coder>

    这样,几个配置文件都编写完毕,就可以生成代码了,生成的代码如下:

/

*
 创建数据表SYSTEM_USER
*/
CREATE TABLE SYSTEM_USER
(
 USER_NAME VARCHAR2(20) NOT NULL,  -- 用户名
 USER_PASSWORD VARCHAR2(20) NOT NULL,  -- 密码
 USER_REALNAME VARCHAR2(50) NOT NULL,  -- 用户姓名
 CONSTRAINT PK_SYSTEM_USER PRIMARY KEY (USER_NAME)
);
COMMENT ON COLUMN SYSTEM_USER.USER_NAME IS '用户名';
COMMENT ON COLUMN SYSTEM_USER.USER_PASSWORD IS '密码';
COMMENT ON COLUMN SYSTEM_USER.USER_REALNAME IS '用户姓名';

这里生成的sql可以直接运行创建数据库表。

除了这个,还可以生成java代码,甚至html页面。

[点这里下载例子]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值