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

    定义好规则和配置格式,就可以开始动手写代码了,首先,需要两个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 (
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
迎使用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、付费专栏及课程。

余额充值