定义好规则和配置格式,就可以开始动手写代码了,首先,需要两个class来保存表的信息和字段信息,还需要从表的xml文件中提取出表的信息,代码如下:
Field.java
package com . bang . dev . autocoder ;
public class Field {
private String fieldLabel ; //字段标签
private String fieldComment ; //注释
private String fieldName ; //字段名
private String fieldClassName ; //转换以后的java类名
private String fieldType ; //字段类型
private String fieldClassType ; //转换以后的java类型
private int fieldLen ; //字段长度
private int fieldNull ; //字段空标志
private boolean readOnly ; //只读标志
private String fieldFormType ; //保留,表单类型
private String fieldSeq ; //序列
private String defaultValue ; //默认值
public String getDefaultValue () {
return defaultValue ;
}
public void setDefaultValue ( String defaultValue ) {
this . defaultValue = defaultValue ;
}
public void setFieldType ( String fieldType ) {
this . fieldType = fieldType ;
}
public void setFieldName ( String fieldName ) {
this . fieldName = fieldName ;
}
public void setFieldLen ( int fieldLen ) {
this . fieldLen = fieldLen ;
}
public void setFieldNull ( int fieldNull ) {
this . fieldNull = fieldNull ;
}
public void setReadOnly ( boolean readOnly ) {
this . readOnly = readOnly ;
}
public int getFieldLen () {
return fieldLen ;
}
public String getFieldName () {
return fieldName ;
}
public String getFieldType () {
return fieldType ;
}
public int getFieldNull () {
return fieldNull ;
}
public boolean isReadOnly () {
return readOnly ;
}
public String getFieldClassName () {
return fieldClassName ;
}
public void setFieldClassName ( String fieldClassName ) {
this . fieldClassName = fieldClassName ;
}
public String getFieldClassType () {
return fieldClassType ;
}
public String getFieldLabel () {
return fieldLabel ;
}
public String getFieldFormType () {
return fieldFormType ;
}
public String getFieldSeq () {
return fieldSeq ;
}
public void setFieldClassType ( String fieldClassType ) {
this . fieldClassType = fieldClassType ;
}
public void setFieldLabel ( String fieldLabel ) {
this . fieldLabel = fieldLabel ;
}
public void setFieldFormType ( String fieldFormType ) {
this . fieldFormType = fieldFormType ;
}
public void setFieldSeq ( String fieldSeq ) {
this . fieldSeq = fieldSeq ;
}
public String getFieldComment () {
return fieldComment ;
}
public void setFieldComment ( String fieldComment ) {
this . fieldComment = fieldComment ;
}
}
Table.java
package com . bang . dev . autocoder ;
import java . io . DataInputStream ;
import java . io . FileInputStream ;
import java . util . ArrayList ;
import java . util . HashMap ;
import java . util . List ;
import org . jdom . Document ;
import org . jdom . Element ;
import org . jdom . input . SAXBuilder ;
import com . infinitouch . xiaowei . autocode . Field ;
public class Table {
private String tableName ;
private String tableClassName ;
private String tableShortName ;
private ArrayList tableFields ;
private ArrayList primaryKeys ;
private String display ;
public String getDisplay () {
return display ;
}
public void setDisplay ( String display ) {
this . display = display ;
}
public ArrayList getPrimaryKeys () {
return primaryKeys ;
}
public void setPrimaryKeys ( ArrayList primaryKeys ) {
this . primaryKeys = primaryKeys ;
}
public String getTableClassName () {
return tableClassName ;
}
public void setTableClassName ( String tableClassName ) {
this . tableClassName = tableClassName ;
}
public ArrayList getTableFields () {
return tableFields ;
}
public void setTableFields ( ArrayList tableFields ) {
this . tableFields = tableFields ;
}
public String getTableName () {
return tableName ;
}
public void setTableName ( String tableName ) {
this . tableName = tableName ;
}
public String getTableShortName () {
return tableShortName ;
}
public void setTableShortName ( String tableShortName ) {
this . tableShortName = tableShortName ;
}
public static Table parse ( String fileName ) throws Exception
{
Table t = new Table ();
ArrayList fieldList = new ArrayList ();
HashMap fieldMap = new HashMap ();
ArrayList pkList = new ArrayList ();
SAXBuilder sb = new SAXBuilder (); //建立构造器
DataInputStream in = new DataInputStream ( new FileInputStream ( fileName ));
Document doc = sb . build ( in ); //读入stream流
Element root = doc . getRootElement (); //获得根节点
Element fields = root . getChild ( "fields" );
List list = fields . getChildren ();
for ( int i = 0 ; i < list . size (); i ++)
{
Element e = ( Element ) list . get ( i );
Field f = new Field ();
f . setFieldClassName ( e . getChild ( "class-name" ). getText ());
f . setFieldName ( e . getChild ( "name" ). getText ());
f . setFieldClassType ( e . getChild ( "class-type" ). getText ());
f . setFieldFormType ( e . getChild ( "form-type" ). getText ());
f . setFieldLabel ( e . getChild ( "label" ). getText ());
f . setFieldLen ( Integer . parseInt ( e . getChild ( "length" ). getText ()));
f . setFieldNull ( Integer . parseInt ( e . getChild ( "null" ). getText ()));
f . setFieldType ( e . getChild ( "type" ). getText ());
f . setReadOnly ( Boolean . getBoolean ( e . getChild ( "readonly" ). getText ()));
if ( e . getChild ( "default" ) != null )
f . setDefaultValue ( e . getChild ( "default" ). getText ());
else
f . setDefaultValue ( "" );
if ( e . getChild ( "seq" ) != null )
f . setFieldSeq ( e . getChild ( "seq" ). getText ());
else
f . setFieldSeq ( "" );
if ( e . getChild ( "comment" ) != null )
f . setFieldComment ( e . getChild ( "comment" ). getText ());
else
f . setFieldComment ( e . getChild ( "label" ). getText ()); //默认以label作为注释
fieldList . add ( f );
fieldMap . put ( f . getFieldName (), f );
}
Element pks = root . getChild ( "pks" );
list = pks . getChildren ();
for ( int i = 0 ; i < list . size (); i ++)
{
Element e = ( Element ) list . get ( i );
String name = e . getChild ( "name" ). getText ();
pkList . add ( fieldMap . get ( name ));
}
Element name = root . getChild ( "name" );
t . setTableName ( name . getText ());
Element class_name = root . getChild ( "class-name" );
t . setTableClassName ( class_name . getText ());
Element short_name = root . getChild ( "short-name" );
t . setTableShortName ( short_name . getText ());
Element display = root . getChild ( "display" );
t . setDisplay ( display . getText ());
//设置主键
t . setPrimaryKeys ( pkList );
//设置表字段
t . setTableFields ( fieldList );
return t ;
}
}
另外需要保存读取进来的配置文件的class,代码如下:
AutoCoderConfig.java
package com . bang . dev . autocoder ;
import java . io . DataInputStream ;
import java . io . FileInputStream ;
import java . util . List ;
import java . util . Vector ;
import org . jdom . Document ;
import org . jdom . Element ;
import org . jdom . input . SAXBuilder ;
public class AutoCoderConfig {
private String saveToPath ; //生成代码的保存路径
private String tableFileName ; //读取表名的文件
private String dbDriver ; //数据库驱动
private String dbUrl ; //数据库URL
private String dbUsername ; //数据库用户名
private String dbPassword ; //数据库密码
private Vector tmpVector ;
private Vector otherClass ;
private boolean dbFlag ;
public boolean isDbFlag () {
return dbFlag ;
}
public void setDbFlag ( boolean dbFlag ) {
this . dbFlag = dbFlag ;
}
public String getDbDriver () {
return dbDriver ;
}
public void setDbDriver ( String dbDriver ) {
this . dbDriver = dbDriver ;
}
public String getDbPassword () {
return dbPassword ;
}
public void setDbPassword ( String dbPassword ) {
this . dbPassword = dbPassword ;
}
public String getDbUrl () {
return dbUrl ;
}
public void setDbUrl ( String dbUrl ) {
this . dbUrl = dbUrl ;
}
public String getDbUsername () {
return dbUsername ;
}
public void setDbUsername ( String dbUsername ) {
this . dbUsername = dbUsername ;
}
public Vector getOtherClass () {
return otherClass ;
}
public void setOtherClass ( Vector otherClass ) {
this . otherClass = otherClass ;
}
public String getSaveToPath () {
return saveToPath ;
}
public void setSaveToPath ( String saveToPath ) {
this . saveToPath = saveToPath ;
}
public String getTableFileName () {
return tableFileName ;
}
public void setTableFileName ( String tableFileName ) {
this . tableFileName = tableFileName ;
}
public Vector getTmpVector () {
return tmpVector ;
}
public void setTmpVector ( Vector tmpVector ) {
this . tmpVector = tmpVector ;
}
public static AutoCoderConfig readConfig ( String name ) throws Exception {
AutoCoderConfig config = new AutoCoderConfig ();
SAXBuilder sb = new SAXBuilder (); //建立构造器
DataInputStream in = new DataInputStream ( new FileInputStream (
name ));
Document doc = sb . build ( in ); //读入stream流
Element root = doc . getRootElement (); //获得根节点
Element file_path = root . getChild ( "file-path" );
config . saveToPath = file_path . getText ();
Element table_file = root . getChild ( "table-file" );
config . tableFileName = table_file . getText ();
//数据库配置
Element db_element = root . getChild (