package com.zzx.study.jdbc;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*
* @ClassName: GenerateJavaBeanUtil
* @Description: TODO 根据表生成JavaBean
* @author A18ccms a18ccms_gmail_com
* @date 2012-11-11 上午12:55:54
*
*/
public class GenerateJavaBeanUtil {
private static final Log log = LogFactory.getLog(GenerateJavaBeanUtil.class);
private String tableName;// 表名
private String[] colnames; // 列名数组
private String[] colTypes; // 列名类型数组
private int[] colSizes; // 列名大小数组
private boolean f_util = false; // 是否需要导入包java.util.Date
private boolean f_sql = false; // 是否需要导入包java.sql.*
private String dataBaseUrl = "jdbc:mysql://localhost:3306/ismp0";
private String userName = "root";
private String password = "mysql";
private String driver = "com.mysql.jdbc.Driver";
private String packagePath;
public void generateJavaBean() {
Connection con = null;
String sql = "select * from " + tableName;
PreparedStatement pStemt = null;
PrintWriter pw =null;
try {
try {
Class.forName(driver);
} catch (ClassNotFoundException e1) {
log.error(e1);
}
con = DriverManager.getConnection(dataBaseUrl, userName, password);
pStemt = con.prepareStatement(sql);
ResultSetMetaData rsmd = pStemt.getMetaData();
int size = rsmd.getColumnCount(); // 统计列
colnames = new String[size];
colTypes = new String[size];
colSizes = new int[size];
for (int i = 0; i < size; i++) {
colnames[i] = rsmd.getColumnName(i + 1);
colTypes[i] = rsmd.getColumnTypeName(i + 1);
if (colTypes[i].equalsIgnoreCase("datetime")) {
f_util = true;
}
if (colTypes[i].equalsIgnoreCase("image")
|| colTypes[i].equalsIgnoreCase("text")) {
f_sql = true;
}
colSizes[i] = rsmd.getColumnDisplaySize(i + 1);
}
String content = parse(colnames, colTypes, colSizes, packagePath);
try {
File directory = new File("");
String path = this.getClass().getResource("").getPath();
log.info("Generate JavaBean path="+path);
log.info("src/?/"
+ path.substring(path.lastIndexOf("/com/",
path.length())));
FileWriter fw = new FileWriter(directory.getAbsolutePath()
+ "/src/"
+ path.substring(
path.lastIndexOf("/com/", path.length()),
path.length()) + initcap(tableName) + ".java");
pw = new PrintWriter(fw);
pw.println(content);
pw.flush();
pw.close();
log.info("Generate Success!");
} catch (IOException e) {
log.error(e);
}
} catch (SQLException e) {
log.error(e);
} finally {
try {
con.close();
pStemt.close();
pw.close();
} catch (SQLException e) {
log.error(e);
}
}
}
/**
* @Title: parse
* @Description: TODO 更加列,类型,生成 JAVABEAN
* @param colnames
* @param colTypes
* @param colSizes
* @param packagePath
* @return
* @return String 返回类型
* @throws
*/
private String parse(String[] colnames, String[] colTypes, int[] colSizes,
String packagePath) {
StringBuffer sb = new StringBuffer();
if (f_util) {
sb.append("import java.util.Date;\r\n");
}
if (f_sql) {
sb.append("import java.sql.*;\r\n");
}
sb.append("package ").append(packagePath).append(";");
sb.append("\r\n\r\n");
sb.append("/**\r\n");
sb.append("* " + tableName + " 实体类\r\n");
sb.append("* " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\r\n");
sb.append("* create by GenerateJavaBeanUtil " + "\r\n");
sb.append("*/ \r");
sb.append("public class " + initcap(tableName) + "{\r\n");
processAllAttrs(sb);// 属性
processAllMethod(sb);// get set方法
sb.append("}\r\n");
return sb.toString();
}
/**
* @Title: processAllAttrs
* @Description: TODO 生成属性
* @param sb
* @return void 返回类型
* @throws
*/
private void processAllAttrs(StringBuffer sb) {
for (int i = 0; i < colnames.length; i++) {
sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " "
+ colnames[i] + ";\r\n");
}
}
/**
* @Title: processAllMethod
* @Description: TODO 生成方法类
* @param sb
* @return void 返回类型
* @throws
*/
private void processAllMethod(StringBuffer sb) {
for (int i = 0; i < colnames.length; i++) {
sb.append("\tpublic void set" + initcap(colnames[i]) + "("
+ sqlType2JavaType(colTypes[i]) + " " +
colnames[i] + "){\r\n");
sb.append("\t\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n");
sb.append("\t}\r\n");
sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get"
+ initcap(colnames[i]) + "(){\r\n");
sb.append("\t\treturn " + colnames[i] + ";\r\n");
sb.append("\t}\r\n");
}
}
/**
* @Title: initcap
* @Description: TODO 首字母大写
* @param str
* @return
* @return String 返回类型
* @throws
*/
private String initcap(String str) {
char[] ch = str.toCharArray();
if (ch[0] >= 'a' && ch[0] <= 'z') {
ch[0] = (char) (ch[0] - 32);
}
return new String(ch);
}
/**
* @Title: sqlType2JavaType
* @Description: TODO 数据库类型转换为java类型
* @param sqlType
* @return
* @return String 返回类型
* @throws
*/
private String sqlType2JavaType(String sqlType) {
if (sqlType.equalsIgnoreCase("bit")) {
return "boolean";
} else if (sqlType.equalsIgnoreCase("tinyint")) {
return "byte";
} else if (sqlType.equalsIgnoreCase("smallint")) {
return "short";
} else if (sqlType.equalsIgnoreCase("int")) {
return "int";
} else if (sqlType.equalsIgnoreCase("bigint")
|| sqlType.equalsIgnoreCase("timestamp")) {
return "long";
} else if (sqlType.equalsIgnoreCase("float")) {
return "float";
} else if (sqlType.equalsIgnoreCase("decimal")
|| sqlType.equalsIgnoreCase("numeric")
|| sqlType.equalsIgnoreCase("real")
|| sqlType.equalsIgnoreCase("money")
|| sqlType.equalsIgnoreCase("smallmoney")) {
return "double";
} else if (sqlType.equalsIgnoreCase("varchar")
|| sqlType.equalsIgnoreCase("char")
|| sqlType.equalsIgnoreCase("nvarchar")
|| sqlType.equalsIgnoreCase("nchar")
|| sqlType.equalsIgnoreCase("text")) {
return "String";
} else if (sqlType.equalsIgnoreCase("datetime")) {
return "Date";
} else if (sqlType.equalsIgnoreCase("image")) {
return "Blod";
}else if(sqlType.equalsIgnoreCase("tinyint")){
return "byte";
}
return null;
}
/**
*
* @Title: main
* @Description: TODO main测试
* @param args
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
GenerateJavaBeanUtil generate =new GenerateJavaBeanUtil();
generate.setDataBaseUrl("jdbc:mysql://localhost:3306/ismp0");
generate.setDriver("com.mysql.jdbc.Driver");
generate.setUserName("root");
generate.setPassword("mysql");
generate.setPackagePath("com.zzx.study.jdbc");
generate.setTableName("T_Function");
generate.generateJavaBean();
}
public String getDataBaseUrl() {
return dataBaseUrl;
}
public void setDataBaseUrl(String dataBaseUrl) {
this.dataBaseUrl = dataBaseUrl;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getPackagePath() {
return packagePath;
}
public void setPackagePath(String packagePath) {
this.packagePath = packagePath;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
}
这个代码应该很全了,测试的也有,其中用到commons的log,具体的规则很简单,像mysql中的tinyint转换成java的byte类型,其中有一个timestamp笔者是把它转换为long类型,因为笔者项目中不支持date类型,这个可以修改下即可。
分享到:
相关推荐
总的来说,"数据库表生成javabean工具及源代码(修正版)"是Java开发中的一个实用工具,它简化了数据模型到代码的转换过程,尤其适用于数据库驱动的应用开发。合理利用这类工具,可以优化开发流程,让开发团队更加...
这个工具能够帮助开发者快速地从数据库表结构生成对应的JavaBean类,极大地减少了手动编写代码的工作量,特别是在处理大量数据表时,其效率提升尤为明显。 JavaBean是一种符合特定规范的Java类,它主要用于数据封装...
标题中的“根据数据库表结构生成javabean的Eclipse插件”是指一种Eclipse插件开发成果,它的主要功能是自动生成Java Bean类,这些Bean类对应于数据库中的表结构,便于开发者在Java应用程序中方便地操作数据库。...
本文将深入探讨一个针对Java开发者的重要工具——"根据数据库表结构生成javabean的eclipse插件"。这个免费插件允许开发者轻松地从Oracle和MySQL数据库的表结构自动生成对应的Java Bean类,大大简化了数据操作层的...
本工具专门针对这种情况,能够根据数据库中的表结构自动生成对应的Java Bean实体类,极大地提高了开发效率。 在使用这个逆向生成工具时,首先需要配置一个XML文件。这个XML文件包含了工具所需的参数,如数据库连接...
总的来说,"SqlToJavaBean_javabean_根据表结构生成javabean_生成javabean_"是一个利用Java技术,自动根据数据库表结构创建JavaBean类的工具,旨在简化开发流程,提高开发效率。通过理解JavaBean规范和数据库操作,...
于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持...
该工具目前仅支持`Oracle`数据库,这意味着它能够读取Oracle数据库的元数据,如表结构、字段类型等,然后根据这些信息自动生成符合预设格式的JavaBean类。Oracle数据库是一个广泛使用的商业关系型数据库系统,特别...
于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,...
标题"表结构生成javabean"指的是一种工具或技术,能够自动生成对应于数据库表结构的Java类(即`javabean`)。这种自动化生成可以节省开发者大量的手动编码时间,提高工作效率,同时减少错误的可能性。它通常涉及到两...
标题中的“根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第4版)”指的是一个强大的软件工具,它能够自动化地将数据库的表结构转换为Java编程语言中的JavaBean对象。JavaBean是Java中的一种...
标题中的“根据表结构自动生成JavaBean”是指在IT开发中的一种常见需求,即从数据库的表结构自动创建对应的Java类,通常称为JavaBean。JavaBean是Java编程语言中的一个标准,它代表了对象的数据封装,常用于表示业务...
这种工具能够自动读取数据库中的表结构,根据表的信息自动生成相应的Java类,即Javabean,以及对应的SQL语句,包括INSERT、SELECT、UPDATE和DELETE等。同时,它还提供了为Javabean自动赋值的功能,使得数据的存取...
总的来说,这个工具为开发者提供了一个高效的解决方案,自动将数据库表结构转化为JavaBean代码,节省了大量的编码时间。通过阅读提供的博文,用户可以学习如何利用这个工具,并了解其高级特性和用法。源码的开放性为...
标题中的“根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第5版)”指的是一个强大的软件工具,它能够自动化地将数据库中的表结构转换为Java编程语言中的JavaBean对象。JavaBean是Java中一种...
于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持去除多个前缀,...
标题中的“根据表结构自动生成JavaBean”是指在IT开发中的一种常见需求,即当数据库设计完成后,开发者需要创建对应的Java类(JavaBean)来表示数据表中的各个字段。这个过程通常繁琐且容易出错,因此出现了自动化...
标题中的“基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v5.8.0版)”指的是一个软件工具,它能够帮助开发者快速地根据数据库结构自动生成相关的Java代码和文档,大大提高了开发效率。...