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页面。
[点这里下载例子]