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

在这过程中发现要把表转换成对应的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,期待你的入住,程序员俱乐部,为您提供更多的帮助!");}}

java工具类–自动将数据库表生成javabean相关推荐

  1. Springboot+Maven+Mybatis-enhance-actable 根据实体类自动更新数据库表和字段

    参考文章springboot+mybatis/mybatis-plus根据实体类自动创建数据库表,我在上面加了需要修改的说明 目录 pom.xml application.yml DataSource ...

  2. Spring Data Jpa 实体类自动创建数据库表失败解决

    先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表. 找了半天发 ...

  3. 实体类自动创建数据库表失败解决

    先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表. 找了半天发 ...

  4. c 自动生成mysql表结构_EntityFrameworkCore 根据实体类自动创建数据库

    1.首先新建 Asp.Net Core WebApi 项目 2.添加一下引用 : 2.1   Pomelo.EntityFrameworkCore.MySql(我用的Mysql 根据自己情况引用就行) ...

  5. java订单编号工具类_[idmiss-common] Java 工具类之- 顺序订单号的生成

    1.前言 这是我写的工具类之一:根据日期生成唯一顺序订单号. 用Java 配合 Redis 实现包含日期的顺序订单号的生成, 效率可以达到 2500+/s 1000W+/h 个 . 2.基本介绍 框架 ...

  6. 【java工具类-抓取图片】正则抓取内容里面的j图片,正则,图片替换格式处理图片java处理文章内容里面的图片格式化工具类,能够最大限度的自动是被图片IMG标签和java使用正则抓取图片说明

    目录 1.java处理图片格式自动抓取格式案例 java代码运行案例: 自动抓取的结果如下 2.java代码去除HTML的格式进行返回无格式文本代码 可以经过正则过滤掉,里面的HTML格式,删除空格, ...

  7. 通过IDEA将数据库表生成对应的pojo类

    通过IDEA将数据库表生成对应的pojo类 1.IDEA连接数据库 在IDEA中点击DataSource按钮,创建好数据库的连接,并打开. (1)点击"+"号,选择Data Sou ...

  8. egg.js java 生产数据_eggjs中,自动从数据库直接生成model.

    eggjs中,自动从数据库直接生成model. 使用sequelize-auto可以自动生成models 直接上命令就可以搞定了 # 安装必要的库 npm install -g sequelize-a ...

  9. eclipse mysql生成实体类_Eclipse实现数据库反向生成实体类(pojo)-------(插件安装和实现步骤的说明)...

    一.插件安装 1.下载插件: http://jaist.dl.sourceforge.net/sourceforge/jboss/HibernateTools-3.2.4.Beta1-R2008103 ...

  10. (6)常用的Java工具类

    目录 前言: 第一部分:常用的16个工具类 一.org.apache.commons.io.IOUtils 二.org.apache.commons.io.FileUtils 三.org.apache ...

最新文章

  1. 基本的函数返回值 使用
  2. 支持向量机背后的数学原理!
  3. snp可视化之瀑布图
  4. 2020-12-13
  5. SQLMap用户手册【超详细】
  6. Repeater片段
  7. ZRender实现粒子网格动画实战
  8. Windows/Android/iOS 等常见 User-Agent 大全
  9. 简单python脚本实例-终于晓得python入门脚本实例
  10. 企业级应用架构(二)三层架构之数据访问层的封装与抽象
  11. js实现相册翻页,滚动,切换,轮播功能
  12. 使用PowerDesigner进行面向对象分析与UML建模(转)
  13. irf和链路聚合综合实验
  14. qt 按钮 gradient_少造轮子!推荐一个Qt的Python组件库
  15. java栈链_java实现链栈与队列详解
  16. Centos上PostgreSQL9.3的安装
  17. WinRAR去除广告
  18. html+dwcs6代码,Dreamweaver cs6如何快速整理代码?
  19. 固态硬盘与机械硬盘读取速度实测
  20. 石川 :学术界、管理人、投资者视角下的因子投资

热门文章

  1. DAOS ARM64调测之旅
  2. 新书推荐 | 数据流机器学习:MOA实例
  3. (七)设定目标:原理与方法
  4. 新导智能融合定位可视化物联系统
  5. iOS 第三方登录之 微信登录
  6. Grain Timers and Reminders
  7. 天行健,君子以自强不息 ;地势坤,君子以厚德载物
  8. 多拨软件测试,记一次折腾苏州移动宽带多拨的过程
  9. 使用DISM修复系统
  10. 强化学习经典算法笔记(六):深度Q值网络 Deep Q Network