自做代码生成器(三)动手写代码

    定义好规则和配置格式,就可以开始动手写代码了,首先,需要两个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(

你可能感兴趣的:(java,F#)