通过数据库表自动生成POJO(JavaBean)对象

主类:

package bqw.tool;

import java.util.ResourceBundle;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.Types;
import java.io.File;
import java.io.FileWriter;
import java.sql.DatabaseMetaData;
import java.util.ArrayList;

public class DB2JavaBean {

private String driver = ""; //驱动
private String url = ""; //数据库访问串
private String userName = ""; //数据库用户名
private String password = ""; //数据库密码
private String tableName = ""; //要生成jopo对象的表名,使用;进行分割
private String tableMatchPattern = ""; //数据库表名匹配模式
private String matchPattern = ""; //是否启用数据库表名匹配模式功能,启用后tableName属性不被使用

public DB2JavaBean(){}

public DB2JavaBean(boolean init){
    if(init){
     ResourceBundle rb = ResourceBundle.getBundle("bqw.tool.DB2JavaBean");
     this.driver = rb.getString("driver");
     this.url = rb.getString("url");
     this.userName = rb.getString("userName");
     this.password = rb.getString("password");
     this.tableName = rb.getString("tableName");
     this.matchPattern = rb.getString("matchPattern");
     this.tableMatchPattern = rb.getString("tableMatchPattern");
    }
  
}

public DB2JavaBean(String baseName){
    ResourceBundle rb = ResourceBundle.getBundle(baseName);
    this.driver = rb.getString("driver");
    this.url = rb.getString("url");
    this.userName = rb.getString("userName");
    this.password = rb.getString("password");
    this.tableName = rb.getString("tableName");
    this.tableMatchPattern = rb.getString("tableMatchPattern");
    this.matchPattern = rb.getString("matchPattern");
  
}

public DB2JavaBean(String driver,String url,String userName,String password,String tableName,String tableMatchPattern,String matchPattern){
    this.driver = driver;
    this.password = password;
    this.userName = userName;
    this.url = url;  
    this.tableName = tableName;
    this.tableMatchPattern = tableMatchPattern;
    this.matchPattern = matchPattern;
}

public void setDriver(String driver){
    this.driver = driver;
}

public void setUrl(String url){
    this.url = url;
}

public void setUserName(String userName){
    this.userName = userName;
}

public void setPassword(String password){
    this.password = password;
}

public void setTableName(String tableName){
    this.tableName = tableName;
}

public void setTableMatchPattern(String tableMatchPattern){
    this.tableMatchPattern=tableMatchPattern;
}

public void setMatchPattern(String matchPattern){
    this.matchPattern = matchPattern;
}

public String getDriver(){
    return this.driver;
}

public String getUrl(){
    return this.url;
}

public String getUserName(){
    return this.userName;
}

public String getPassword(){
    return this.password;
}

public String getTableName(){
    return this.tableName;
}

public String getTableMatchPattern(){
    return this.tableMatchPattern;
}

public String getMatchPattern(){
    return this.matchPattern;
}
public void init(int ObjectTypeOrCommonlyType){
    try{
     Class.forName(this.driver).newInstance();
     Connection conn = DriverManager.getConnection(this.url,this.userName, this.password);
     String [] tables = new String[0];
     ArrayList tableal = new ArrayList(20); 
     if("true".equals(this.matchPattern)){   
      DatabaseMetaData dbmd = conn.getMetaData();
      ResultSet dbmdrs = dbmd.getTables(null, this.userName.toUpperCase(), this.tableMatchPattern, new String[]{"TABLE"});
      while(dbmdrs.next()){
       tableal.add(dbmdrs.getString(3));
      }
      dbmdrs.close();
      if(tableal.size()==0){
       dbmdrs = dbmd.getTables(null, this.userName.toLowerCase(), this.tableMatchPattern, new String[]{"TABLE"});
       while(dbmdrs.next()){
        tableal.add(dbmdrs.getString(3));
       }
       dbmdrs.close();
      }    
      if(tableal.size()==0){
       dbmdrs = dbmd.getTables(null, this.userName, this.tableMatchPattern, new String[]{"TABLE"});
       while(dbmdrs.next()){
        tableal.add(dbmdrs.getString(3));
       }
       dbmdrs.close();
      }    
      tables = new String[tableal.size()];
      for(int ti = 0;ti
       tables[ti] = tableal.get(ti);
      }
     }
     else{
      tables = this.tableName.split(";");
     }   
     String strType;
     String strName;
     String className;
     String [] nameSect;
     StringBuilder tbn = new StringBuilder();
     StringBuilder tstr1 = new StringBuilder();
     StringBuilder tstr2 = new StringBuilder();
     File file = new File("JavaBean");
     if(!file.exists())file.mkdir();
     if(!file.isDirectory())file.mkdir();
     for(int i=0;i
      nameSect = tables[i].split("_");
      for(String ns : nameSect){
       tbn.append(ns.substring(0,1).toUpperCase()+ns.substring(1).toLowerCase());
      }
    
      className = tbn.toString();
      tbn.delete(0,tbn.length());
      tstr1.append("import java.sql.*; ");
      tstr1.append("\n");
      tstr1.append("import javax.sql.*; ");
      tstr1.append("\n");
      tstr1.append("import java.io.*; ");
      tstr1.append("\n");
      tstr1.append("public class "+className+" implements Serializable{ ");
      tstr1.append("\n");    
      try{
       System.out.println(tables[i]);
       Statement statement = conn.createStatement();
       ResultSet rs = statement.executeQuery("select * from "+tables[i]);
       ResultSetMetaData rsd = rs.getMetaData();
       int cc = rsd.getColumnCount();
       for(int j=1;j<=cc;j++){
        if(ObjectTypeOrCommonlyType == StaticVar.OBJECTTYPE){
         strType = this.getObjectType(rsd.getColumnType(j));
        }
        else{
         strType = this.getCommonlyType(j);
        }
        if(strType == null)continue;
        strName = rsd.getColumnName(j);
        tstr1.append(" private "+strType+" "+strName.toLowerCase()+";");
        tstr1.append("\n");
        tstr2.append(" public void set"+strName.substring(0,1).toUpperCase()+strName.substring(1).toLowerCase()+"("+strType+" "+strName.toLowerCase()+"){");
        tstr2.append("\n");
        tstr2.append("    this."+strName.toLowerCase()+" = "+strName.toLowerCase()+";");
        tstr2.append("\n");
        tstr2.append(" }");
        tstr2.append("\n");
        tstr2.append(" public "+strType+" get"+strName.substring(0,1).toUpperCase()+strName.substring(1).toLowerCase()+"(){");
        tstr2.append("\n");
        tstr2.append("    return this."+strName.toLowerCase()+";");
        tstr2.append("\n");
        tstr2.append(" }");
        tstr2.append("\n");
      
      
       }
       rs.close();
       statement.close();
     
      }
      catch(Exception tableE)
      {
       tableE.printStackTrace();
      }
      tstr2.append("} ");
      tstr2.append("\n");
      tstr1.append(tstr2.toString());
      tstr1.append("\n");
      file = new File("JavaBean/"+className+".java");
      FileWriter fw = new FileWriter(file);
      fw.write(tstr1.toString());
      fw.flush();
      fw.close();
      tstr1.delete(0, tstr1.length());
      tstr2.delete(0, tstr2.length());
     }
     conn.close();
    }
    catch(Exception driverE){
     driverE.printStackTrace();
    }
  
}

public String getObjectType(int type){
    switch(type){
    case Types.ARRAY:return null;
    case Types.BIGINT:return "Long";
    case Types.BINARY:return null;
    case Types.BIT:return "Byte";
    case Types.BLOB:return "Blob";
    case Types.BOOLEAN:return "Boolean";
    case Types.CHAR:return "String";
    case Types.CLOB:return "Clob";
    case Types.DATALINK:return null;
    case Types.DATE:return "Date";
    case Types.DECIMAL:return "Double";
    case Types.DISTINCT:return null;
    case Types.DOUBLE:return "Double";
    case Types.FLOAT:return "Float";
    case Types.INTEGER:return "Integer";
    case Types.NUMERIC:return "Integer";
    case Types.JAVA_OBJECT:return null;
    case Types.LONGVARBINARY:return null;
    case Types.LONGVARCHAR:return null;
    case Types.NULL:return null;
    case Types.OTHER:return null;
    case Types.REAL:return null;
    case Types.REF:return null;
    case Types.SMALLINT:return "Short";
    case Types.STRUCT:return null;
    case Types.TIME:return "Time";
    case Types.TIMESTAMP:return "Timestamp";
    case Types.TINYINT:return "Short";
    case Types.VARBINARY:return null;
    case Types.VARCHAR:return "String";  
    default :return null;
    }
}

public String getCommonlyType(int type){
    switch(type){
    case Types.ARRAY:return null;
    case Types.BIGINT:return "long";
    case Types.BINARY:return null;
    case Types.BIT:return "byte";
    case Types.BLOB:return "String";
    case Types.BOOLEAN:return "boolean";
    case Types.CHAR:return "String";
    case Types.CLOB:return "String";
    case Types.DATALINK:return null;
    case Types.DATE:return "Date";
    case Types.DECIMAL:return "double";
    case Types.DISTINCT:return null;
    case Types.DOUBLE:return "double";
    case Types.FLOAT:return "float";
    case Types.INTEGER:return "int";
    case Types.NUMERIC:return "int";
    case Types.JAVA_OBJECT:return null;
    case Types.LONGVARBINARY:return null;
    case Types.LONGVARCHAR:return null;
    case Types.NULL:return null;
    case Types.OTHER:return null;
    case Types.REAL:return null;
    case Types.REF:return null;
    case Types.SMALLINT:return "short";
    case Types.STRUCT:return null;
    case Types.TIME:return "Time";
    case Types.TIMESTAMP:return "Timestamp";
    case Types.TINYINT:return "short";
    case Types.VARBINARY:return null;
    case Types.VARCHAR:return "String";  
    default :return null;
    }
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    DB2JavaBean d2j = new DB2JavaBean(true);
    System.out.println(d2j.getDriver());
    System.out.println(d2j.getUrl());
    System.out.println(d2j.getUserName());
    System.out.println(d2j.getPassword());
    System.out.println(d2j.getTableName());
    System.out.println(d2j.getTableMatchPattern());
    System.out.println(d2j.getMatchPattern());
    d2j.init(StaticVar.OBJECTTYPE);
    //d2j.init(StaticVar.COMMONLYTYPE);
    System.out.println("OK");
}

}

静态类:

package bqw.tool;

public class StaticVar {
public static final int OBJECTTYPE = 0;
public static final int COMMONLYTYPE = 1;
}

配置文件:

#驱动
driver=org.apache.derby.jdbc.ClientDriver
#数据库访问串
url=jdbc:derby://localhost:1527/myeclipse
#用户名
userName=classiccars
#密码
password=classiccars
#需要产生pojo文件的表名,使用;号分隔
tableName=customer;employee;office;payment;
#如果matchPattern为true,则tableMatchPattern起作用,tableName不起作用
matchPattern=true
#表名匹配模式,使用like语句的匹配模式,自动选择属于此用户且表名称与tableMatchPattern匹配的表
tableMatchPattern=%

#驱动
#driver=oracle.jdbc.driver.OracleDriver
#数据库访问串
#url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
#用户名
#userName=test
#密码
#password=test
#需要产生pojo文件的表名,使用;号分隔
#tableName=t_files;t_sys_wordtemplate;t_sys_wordmodel;t_sys_user;t_sys_user_dept;
#如果matchPattern为true,则tableMatchPattern起作用,tableName不起作用
#matchPattern=true
#表名匹配模式,使用like语句的匹配模式,自动选择属于此用户且表名称与tableMatchPattern匹配的表,区分大小写
#tableMatchPattern=T_%

转自:http://hi.baidu.com/bianqiwei/item/e37c4eaa913acf14a8cfb7dd

时间: 2024-10-07 18:07:41

通过数据库表自动生成POJO(JavaBean)对象的相关文章

Activiti 数据库表自动生成策略

Activiti 引擎启动时默认会检测数据库版本与程序版本是否相符,不相符就会抛出异常停止引擎的初始化. 这一策略可以通过引擎的初始化配置参数databaseSchemaUpdate来控制, 如下图的spring创建流程引擎的配置文件: <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <proper

Mybatis根据数据库中的表自动生成Bean对象与Mapper文件 (小白式教程)

示例IDE采用 IDEA //**********************华丽的分割线****************// 1.新建一个java项目-->在Src目录下创建3个包(Package)与一个文件夹(Directory) Package(包)- ①bean:存放自动生成的Java Bean ②mapper:存放自动生成的mapper接口与对应的.xml文件 ③test:存放一个main方法用于执行自动生成操作 Directory(目录):: lib:存放项目所需要导入的包 2.向lib

MyBatis 逆向工程——根据数据表自动生成model、xml映射文件、mapper接口

MyBatis Generator(MBG)的使用 MBG可以根据数据表生成对应的model.xml映射文件.mapper接口,只是简单的生成,还需要根据需求修改. 1.下载jar包 https://github.com/mybatis/generator/releases 解压后有3个jar包,只使用一个: 2.新建一个新的java项目,导入mybatis.jar.mybatis-generator-core.jar.数据库驱动. 3.src下新建config.xml http://mybat

idea 根据数据库表自动创建持久化类

一.点击最右边的Database: 二.点击,再点DataSource选择数据库类型,配置数据库信息: 三.打开项目结构,选择,找到你的项目,点击,添加hibernate: 四.如果有现成的cfg.xml文件,则选择右边的添加按钮,将xml文件添加进来: 五.选择左下角的Persistence按钮,选择hibernate配置文件生成实体: 六.选择数据源,选择实体类所在的包,选择表: 这样生成的持久化类是注解方式配置的. 如果想用xml配置,可以通过以下的设置,自动生成hbm.xml配置文件:

如何解决Excel表自动生成备份文件

近期有同事在编辑EXCEL表的时候,编辑保存后,总是会自动生成一个同名的"xxx的备份.xlk"文件,如下图, 一开始查了一下百度,没找到答案,无意中看到后缀名是xlk,就用后缀名再搜索一下百度,得到答案了,原因是勾选了"生成备份文件"这一项, 解决办法: 在"文件"-"另存为"-"工具"-"常规选项"-在"保存选项"对话框中,去掉"生成备份文件"

基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体二

LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://liningit.github.io/LnskyDB/ 开源地址: https://github.com/liningit/LnskyDB nuget地址: https://www.nuget.org/packages/LnskyDB/ 功能特点 Lambda表达式查询方便 基于Dapper的Lambda表达式

在MyEclipse的web项目/java项目中,使用Hibernate-tools中的hbm2java和hbm2ddl工具,根据hbm文件自动生成pojo和数据库脚本

     首先,我一定要吐槽下,这个Ant管理部署项目的工具,以及hibernate刚刚学习,导入我这一个简单的问题整了一天多,实在效率有点低下.在这两天中,①了解了Ant,知道了在Ant中很灵活的步骤项目的情况,知道了build.xml文件的一些基本写法.②还学习了在MyEclipse这样的集成工具中完成项目部署.③以及在这两种情况中,利用hibernateTools中的hbm2java和hbm2ddl工具,根据对象关系映射文件,自动生成POJO以及SQL文件(就是数据表). 一,在web项目

在MyEclipse的web项目/java项目中,使用Hibernate-tools中的hbm2java和hbm2ddl工具,依据hbm文件自己主动生成pojo和数据库脚本

     首先.我一定要吐槽下,这个Ant管理部署项目的工具.以及hibernate刚刚学习,导入我这一个简单的问题整了一天多.实在效率有点低下. 在这两天中,①了解了Ant.知道了在Ant中非常灵活的步骤项目的情况,知道了build.xml文件的一些基本写法.②还学习了在MyEclipse这种集成工具中完毕项目部署. ③以及在这两种情况中.利用hibernateTools中的hbm2java和hbm2ddl工具,依据对象关系映射文件,自己主动生成POJO以及SQL文件(就是数据表). 一,在w

了解vo pojo javabean dto

1什么是vo. (1.VO是用new关键字创建,由GC回收的 PO是向数据库中添加新数据时创建,删除数据库中的数据时削除的.并且只能存活在一个数据库连接中,断开连接即被销毁 (2.VO是值对象,业务对象,存活在业务层,是业务逻辑使用的,存活的目的就是为数据提供一个生存的地方.PO则是有状态的,每个属性代表其当前的状态.它是物理数据的对象表示.使用它,可以使我们的程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换. (3.VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都