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

    定义好规则和配置格式,就可以开始动手写代码了,首先,需要两个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(
迎使用autoCode =================== 项目介绍 ------------------- > **autoCode介绍** > - autoCode是一个代码生成工具。基于velocity模板引擎,采用SpringMVC + mybatis + FDUI + mysql > - 此工具只负责生成代码文件,不会生成完整功能的应用程序. > **其特点主要有** > - 用户登陆 - 每个用户有他自己独立的数据库连接配置和模板配置; > - 数据源配置 - 可以配置多个数据源,多种数据库类型(目前支持Mysql,MSServer数据库,可以扩展); > - 模板配置 - 定义自己的模板,采用velocity模板语法.这样可以根据模板来生成不同的代码,如POJO,Dao,mybatis配置文件等; > - 操作简单 - 生成代码只需步:1. 选择数据源;2. 选择表;3. 选择模板。 > - 提供简单的客户端操作,能将代码直接生成到本地 > **部署程序步骤:** > 1. Maven构建eclipse工程,运行Maven命令:mvn eclipse:eclipse,完成后导入到eclipse中 > 2. 导入数据库(MYSQL),SQL文件在项目根目录下,名为autoCode.sql,运行里面的内容即可 > 3. 修改数据库连接参数,配置文件在src/main/resources/config.properties > 4. 启动项目,运行Maven命令:mvn jetty:run > 5. 浏览器输入http://localhost:8088/autoCode 登录用户名密码均为admin 端口默认用了8088,如需修改,前往pom.xml,找到maven-jetty-plugin插件的port参数. jetty安装配置 ------------------- 从 http://download.eclipse.org/jetty/ 中下载jetty 文件,命令 unzip 解压zip文件 在eclipse help->install new software 中通过地址http://run-jetty-run.googlecode.com/svn/trunk/updatesite/ 安装jetty插件 安装好插件后,可以通过 点击项目 -》右键-> run configuration-->jetty webapp 项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值