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,期待你的入住,程序员俱乐部,为您提供更多的帮助!");}}
java工具类–自动将数据库表生成javabean相关推荐
- Springboot+Maven+Mybatis-enhance-actable 根据实体类自动更新数据库表和字段
参考文章springboot+mybatis/mybatis-plus根据实体类自动创建数据库表,我在上面加了需要修改的说明 目录 pom.xml application.yml DataSource ...
- Spring Data Jpa 实体类自动创建数据库表失败解决
先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表. 找了半天发 ...
- 实体类自动创建数据库表失败解决
先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表. 找了半天发 ...
- c 自动生成mysql表结构_EntityFrameworkCore 根据实体类自动创建数据库
1.首先新建 Asp.Net Core WebApi 项目 2.添加一下引用 : 2.1 Pomelo.EntityFrameworkCore.MySql(我用的Mysql 根据自己情况引用就行) ...
- java订单编号工具类_[idmiss-common] Java 工具类之- 顺序订单号的生成
1.前言 这是我写的工具类之一:根据日期生成唯一顺序订单号. 用Java 配合 Redis 实现包含日期的顺序订单号的生成, 效率可以达到 2500+/s 1000W+/h 个 . 2.基本介绍 框架 ...
- 【java工具类-抓取图片】正则抓取内容里面的j图片,正则,图片替换格式处理图片java处理文章内容里面的图片格式化工具类,能够最大限度的自动是被图片IMG标签和java使用正则抓取图片说明
目录 1.java处理图片格式自动抓取格式案例 java代码运行案例: 自动抓取的结果如下 2.java代码去除HTML的格式进行返回无格式文本代码 可以经过正则过滤掉,里面的HTML格式,删除空格, ...
- 通过IDEA将数据库表生成对应的pojo类
通过IDEA将数据库表生成对应的pojo类 1.IDEA连接数据库 在IDEA中点击DataSource按钮,创建好数据库的连接,并打开. (1)点击"+"号,选择Data Sou ...
- egg.js java 生产数据_eggjs中,自动从数据库直接生成model.
eggjs中,自动从数据库直接生成model. 使用sequelize-auto可以自动生成models 直接上命令就可以搞定了 # 安装必要的库 npm install -g sequelize-a ...
- eclipse mysql生成实体类_Eclipse实现数据库反向生成实体类(pojo)-------(插件安装和实现步骤的说明)...
一.插件安装 1.下载插件: http://jaist.dl.sourceforge.net/sourceforge/jboss/HibernateTools-3.2.4.Beta1-R2008103 ...
- (6)常用的Java工具类
目录 前言: 第一部分:常用的16个工具类 一.org.apache.commons.io.IOUtils 二.org.apache.commons.io.FileUtils 三.org.apache ...
最新文章
- 基本的函数返回值 使用
- 支持向量机背后的数学原理!
- snp可视化之瀑布图
- 2020-12-13
- SQLMap用户手册【超详细】
- Repeater片段
- ZRender实现粒子网格动画实战
- Windows/Android/iOS 等常见 User-Agent 大全
- 简单python脚本实例-终于晓得python入门脚本实例
- 企业级应用架构(二)三层架构之数据访问层的封装与抽象
- js实现相册翻页,滚动,切换,轮播功能
- 使用PowerDesigner进行面向对象分析与UML建模(转)
- irf和链路聚合综合实验
- qt 按钮 gradient_少造轮子!推荐一个Qt的Python组件库
- java栈链_java实现链栈与队列详解
- Centos上PostgreSQL9.3的安装
- WinRAR去除广告
- html+dwcs6代码,Dreamweaver cs6如何快速整理代码?
- 固态硬盘与机械硬盘读取速度实测
- 石川 :学术界、管理人、投资者视角下的因子投资