java工具类–自动将数据库表生成javabean

最近和数据库的表打交道挺多的,因为暂时做的是接口活。

在这过程中发现要把表转换成对应的javabean类型,字段少的表还行,如果不小心碰到几十个字段的他妈的写起来就有点麻烦了,万一碰到几百个的呢,那不是要崩溃。

于是想写个工具类,自动生成javabean。

先说下思路:

1.读取数据库表,获取里面的字段名。

准备连接数据库的驱动包,这里只是针对了oracle数据库和mysql数据库

2.构建一个stringBuffer字符串,用来生成我们需要的类。

3.写入文件

要求具备相应的文件流知识。

好了,准备工作就这些,下面附上代码,

package com.tool;
/*
 * 给出数据库JAR包,数据库链接路径,数据库表空间名,数据库名,数据库密码,表名
 *可以提取出来创建表属性的javaBean文件,并且提供标准的get,set方法。
 * 此程序将所有字段和数据提取出来定义为String类型,如有别的需要可以提取表中字段的类型和别的表信息,自动生成
 * java文件
 * \t 表示 空格
 * \r 表示换行 等价于 \n
 * ResultSetMetaData 关键
 * */
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
 
public class SqlToBean {
  private Connection conn = null;    //保存链接路径
  private Statement stmt = null;     //建立连接
  private ResultSetMetaData meta = null;  //保存表属性信息
  private ResultSet rs = null;  //查询结果集
  private OutputStreamWriter osw = null;
  private BufferedWriter bw = null;
  private FileOutputStream fos = null;
  private static StringBuffer coding = new StringBuffer();  //字符串缓冲区
  private String driver = null;    //数据库包名
  private String url = null;          //路径名
  private String table = null;        //表空间名
  private String password = null;     //密码
  private String tableName = null;    //表名
 
  public SqlToBean(String driver, String url, String table, String password, String tableName) {
    this.driver = driver;
    this.url = url;
    this.table = table;
    this.password = password;
    this.tableName = tableName;
  }
 
  private String getCoding(StringBuffer code) {
    return code.toString();
  }
 
  private StringBuffer createGenerate(String property) {
    String prop = property.toLowerCase();
    coding.append("\r \t private String " + prop + ";");
    return coding;
  }
 
  private StringBuffer createMethod(String[] str){
    for(int i=0;i<str.length;i++){
      //str[i].charAt(0) - 32)转成大写   思路
      str[i] = str[i].toLowerCase();
      coding.append("\r \t public void set" + (char)(str[i].charAt(0) - 32)+ str[i].substring(1)+"(String " + str[i] +"){");
      coding.append("\r \t\t this."+str[i] + "=" + str[i] + ";");
      coding.append("\r \t }");
      coding.append("\r \t public String get" + (char)(str[i].charAt(0) - 32)+ str[i].substring(1)+"(){");
      coding.append("\r \t\t return this."+str[i] +  ";");
      coding.append("\r \t }\n");
    }
    return coding;
  }
  /*
   * 关闭与数据库的所有链接
   * */
  private void destroy() {
    try {
      if(conn != null){
        conn.close();
        conn = null;
      }
      if(stmt != null){
        stmt.close();
        stmt = null;
      }
      if(rs != null){
        rs.close();
        rs = null;
      }
 
      if(bw != null){
        bw.close();
        bw = null;
      }
      if(fos != null) {
        fos.close();
        fos = null;
      }
      if(osw != null) {
        osw.close();
        osw = null;
      }
 
    } catch (SQLException e) {
      e.printStackTrace();
    }  catch (IOException e) {
      e.printStackTrace();
    }
  }
  /*
   * 数据库连接发生异常就关闭链接
   * */
  private  void connect () {
    try {
      Class.forName(driver);
      conn = DriverManager.getConnection(url,table,password);
      stmt = conn.createStatement();
 
      rs = stmt.executeQuery("select  * from " + tableName ); //查询下确定结果集是那个表的
      meta = rs.getMetaData();                         //调用结果集的记录表信息的方法
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
      try {
        if(conn != null){
          conn.close();
          conn = null;
        }
        if(stmt != null){
          stmt.close();
          stmt = null;
        }
        if(rs != null){
          rs.close();
          rs = null;
        }
      } catch (SQLException e1) {
        e.printStackTrace();
      }
    }  catch (SQLException e) {
      e.printStackTrace();
      try {
        if(conn != null){
          conn.close();
          conn = null;
        }
        if(stmt != null){
          stmt.close();
          stmt = null;
        }
        if(rs != null){
          rs.close();
          rs = null;
        }
      } catch (SQLException e1) {
        e.printStackTrace();
      }
    } 
 
  }
 
  private String[] getColumenName() {
    /*得到表的所有列名以字符串数组的形式返回
     * */
    int count;
    String[] str = null;
    try {
      count = meta.getColumnCount();
      String[] strColumenName = new String[count];
      for(int i = 1;i <= count; i++) {
        strColumenName[i-1] = meta.getColumnName(i);
      }
      str = strColumenName;
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return str;
  }
  /**
   * 写入指定的文件中
   * @param message
   */
  private void writeData(String message,String className) {
    String file = "C:\\"+className+".java";
    try {
      fos = new FileOutputStream(file);
      osw = new OutputStreamWriter(fos);
      bw = new BufferedWriter(osw);
      bw.write(message);
      bw.flush();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
 
  }
 
  public StringBuffer createClassName(String className){
    coding.append("public class " + className + "{\n");
    return coding;
  }
 
  public static void main(String[] args) {
    String className = "Hellow";
    //SqlToBean sqlToBean = new SqlToBean("oracle.jdbc.driver.OracleDriver","jdbc:oracle:thin:@192.168.3.11:1521:orcl","mamibon","mamibon","my_standard_data2");
    SqlToBean sqlToBean = new SqlToBean("org.gjt.mm.mysql.Driver","jdbc:mysql://117.79.84.144:3306/wordpress","wangjun","wangjun123","wp_users");
    //连接数据库
    sqlToBean.connect();
    sqlToBean.createClassName(className);
    //获取表的字段
    String[] str ;
    str = sqlToBean.getColumenName();
    for(int i = 0;i<str.length ;i++) {
      sqlToBean.createGenerate(str[i]);
    }
    coding.append("\n");
    sqlToBean.createMethod(str);
    coding.append("\n}");
    //写入文件
    sqlToBean.writeData(sqlToBean.getCoding(coding),className);
    sqlToBean.destroy();
 
    System.out.println("如果觉得这工具类不错,请关注我们的网站:http://www.itbuluoge.com,期待你的入住,程序员俱乐部,为您提供更多的帮助!");
    System.out.println("如果觉得这工具类不错,请关注我们的网站:http://www.itbuluoge.com,期待你的入住,程序员俱乐部,为您提供更多的帮助!");
  }
 
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
博客地址:http://blog.csdn.net/vipbooks 一直以来把数据库转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除前缀,并支持去除多个前缀,支持精确指定只生成哪几个的Bean,也支持模糊查找生成哪几个的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆! 该压缩包中包含32位和64位两个版本。 第11版更新震撼发布,此次版本更新如下: 1、新增数据源配置管理功能,可以为每种型的数据库添加多个不同的数据源。 2、新增快速新增数据源功能,快速为当前选中的数据库添加数据源。 3、新增打开目录功能,左键打开菜单选择要打开的目录,点击右键可以快速打开当前应用所在目录。 4、新增对使用驼峰命名的名和字段名的支持,例如名是UserInfo,生成Bean的名也是UserInfo; 字段名是userId,那么生成的Bean字段也是userId。 5、主界面移除驱动名下拉选项,并新增快速切换数据源配置下拉选项。 6、改进精确匹配中“更多”的选功能,在文本框中已选中的在打开选对话框时会被勾选。 7、改进清除StringBuffer工具,选择SQL型会自动将“//”替换为“--”。 8、改进字符串格式化工具,将有更多型可选,操作更方便。 9、其他一些小Bug的修改和代码优化调整。
一直以来把数据库转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除前缀,并支持去除多个前缀,支持精确指定只生成哪几个的Bean,也支持模糊查找生成哪几个的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆。 第10版更新震撼发布,效率大提升,功能更加强大,速度过来围观,这次版本更新如下: 1、新增数据库连接池并可以手动配置,提升数据库连接的使用效率。 2、新增多线程并发处理并可以手动配置,大大提升数据收集和文件生成的效率。 3、增强字符串格式化工具,使得自动拼接字符串的应用场景更多。 4、测试数据库连接、生成Bean文件、精确匹配的更多等按钮都使用了异步线程进行处理, 这样界面不再会被卡住了,点了这些按钮以后还可以同时对界面进行其他操作, 如:移动、最小化、设置参数、使用集成工具等。 5、生成Bean文件按钮添加计时功能,当点击该按钮以后,按钮上的文字会变为读秒计时, 这样就不会以为程序卡死了。 6、更新Oracle的数据库驱动包,提升了数据库连接和查询的速度。 7、更新MySQL的数据库驱动包。 8、其他一些小Bug的修改和代码优化调整。
博客地址:http://blog.csdn.net/vipbooks 一直以来把数据库转换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除前缀,并支持去除多个前缀,支持精确指定只生成哪几个的Bean,也支持模糊查找生成哪几个的Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆! 第12版更新震撼发布,此次版本更新如下: 1、新增参数配置管理功能,可以为不同的项目配置不同的参数。 2、新增快速新增参数配置功能,快速为项目添加参数配置。 3、新增选择实体注解功能,生成实体的时候自动为实体添加额外的注解。 4、弹出对话框界面大小调整。 5、新增数据源添加默认设置。 6、精确匹配在点更多时,已选中的会在弹出的列中被勾选中。 7、修复模糊匹配找不到的Bug。 8、其他一些小Bug的修改和代码优化调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值