通过数据库表自动生成javaBean

本次采用的是MySql数据库,通过查询对应的表的字段,获得各个字段名,通过元数据获取每个字段的数据类型,再通过判断将数据库中的数据类型转换成java中对应的数据类型。通过循环遍历以及根据javaBean的标准,通过文件操作将java文件生成在项目下对应的包路径中。

生成javaBean的代码如下:

package createjavaBean;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;


public class CreateJavaBean extends ConnectionDatabase {
// 包名
public static String strpackage;
// 数据库表名
public static String tableName;


public static StringBuffer sb = new StringBuffer();

public static Connection con = null;


public static ResultSet res = null;

public static ResultSetMetaData rsmd = null;
// 加载配置文件
static{
loadConfig();
}
public static void loadConfig(){
InputStream stream = ConnectionDatabase.class.getClassLoader().getResourceAsStream("db.properties");
Properties pro = new Properties();
try {
pro.load(stream);
strpackage = pro.getProperty("strpackage");
tableName = pro.getProperty("tableName");
} catch (IOException e) {
e.printStackTrace();

}


public static void execute() throws IOException, SQLException {
con = getConnection();
String strsql = "select * from " + tableName;
Statement st;
try {


st = con.createStatement();


res = st.executeQuery(strsql);


rsmd = res.getMetaData();
String newstrpack = "";
newstrpack = strpackage.replace(".", "/");
System.out.println(newstrpack);
// 类名
String className = tableName.substring(0, 1).toUpperCase()
+ tableName.substring(1);
File file = new File("src" + "/" + newstrpack + "/" + className
+ ".java");
sb.append("package " + strpackage + ";\n");
sb.append("public class " + className + " implements Serializable{");
sb.append("\n");
for (int i = 1; i < rsmd.getColumnCount(); i++) {
String type = typename(getType(rsmd.getColumnTypeName(i)));
// 打印属性
System.out.println(getType(rsmd.getColumnTypeName(i)));
sb.append("\tprivate\t");
sb.append(type + "\t");
sb.append(rsmd.getColumnName(i) + ";");
sb.append("\n");
// 打印get方法
sb.append("\t//get方法\n");
sb.append("\tpublic\t" + type + "\tget" + rsmd.getColumnName(i).substring(0, 1).toUpperCase()+rsmd.getColumnName(i).substring(1)
+ "(){\n");
sb.append("\t\treturn " + rsmd.getColumnName(i) + ";\n\t\n");
sb.append("}\n");
// 打印set方法
sb.append("\t//set方法\n");
//
sb.append("\tpublic\t" + type + "\tset" + rsmd.getColumnName(i).substring(0, 1).toUpperCase()+rsmd.getColumnName(i).substring(1)
+ "(" + type + "\t" + rsmd.getColumnName(i) + ")"
+ "{\n");
sb.append("\treturn\tthis." + rsmd.getColumnName(i) + "\t = "
+ rsmd.getColumnName(i) + ";\n");
sb.append("}\n");
}
sb.append("}");
String strsb = sb.toString();
// 创建一个FileWriter对象
FileWriter fw = new FileWriter(file);
// 创建一个BufferedWriter对象
BufferedWriter bw = new BufferedWriter(fw);
bw.write(strsb);
bw.newLine();
// 关闭文件流
bw.flush();
fw.close();


} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
closeResultSet(res);
closeConneciton(con);
}


System.out.println(sb);
}


public static String typename(String typename) {
String tystr = null;
if (typename.equals("VARCHAR")) {
tystr = "String";
}else if (typename.equals("INTEGER")) {
tystr = "Integer";
}else if(typename.equals("TIMESTAMP")){
tystr = "Timestamp";
}else if(typename.equals("BIGINT")){
tystr = "Integer";
}else if(typename.equals("TEXT")){
tystr = "String";
}else if(typename.equals("DATETIME")){
tystr = "Date";
}else if(typename.equals("CLOB")){
tystr = "String";
}else{
tystr = "Object";
}
return tystr;


}


public static void main(String[] args) {
try {
execute();
} catch (IOException | SQLException e) {
e.printStackTrace();
}
}


public static String getType(String type) {
String colType = null;
if (type.indexOf("(") > 0) {
colType = type.substring(0, type.indexOf("("));
} else {
colType = type;
}
return colType;
}

}

连接数据库的代码如下:

package createjavaBean;


import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;


public class ConnectionDatabase{
private static String url;
private static String className;
private static String userName;
private static String password;
public static void closeResultSet(ResultSet res){
if(res != null){
try {
res.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void closeConneciton(Connection conn){
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

static{
loadConfig();
}
public static void loadConfig(){
InputStream stream = ConnectionDatabase.class.getClassLoader().getResourceAsStream("db.properties");
Properties pro = new Properties();
try {
pro.load(stream);
url = pro.getProperty("url");
className = pro.getProperty("className");
userName = pro.getProperty("userName");
password = pro.getProperty("password");
Class.forName(className);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException{
try {
return DriverManager.getConnection(url, userName, password);
} catch (SQLException e) {
e.printStackTrace();
throw e;
}
}
public static void main(String[] args) {
try {
Class.forName("ConnectionDatabase");
System.out.println(getConnection());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

properties配置文件内容如下:

## using MYSQL database
url=jdbc:mysql://localhost:3306/information
className=com.mysql.jdbc.Driver
userName=root
password=123456
##package path it is has been existing
strpackage=com.changda.student.entity
## database table name
tableName=employee

此次使用的jar包为:mysqljdbc.jar

博客地址: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的修改和代码优化调整。
博客地址:http://blog.csdn.net/vipbooks 一直以来根据数据库结构自动生成JavaBean自动生成MyBaits的Mapper映射配置文件、自动生成数据库设计文档都是一件让人很头痛的事情,既浪费时间又很繁琐,看着几十上百个的成千上万个字段,真是一件让人痛苦的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,于是就自己用Swing写了一个基于数据库的自动化生成工具,支持MySQL、Oracle、SQLServce、PostgreSQL四种数据库,支持Window、Linux、MacBook等多个作系统,完美支持JPA注解,可以同时生成Entity和DTO等,可以自动去除前缀,支持单个和批量生成JavaBean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有注释了。更重要的是还能自动生成数据库设计文档和MyBaits的Mapper映射配置文件,如果有多个数据源还能批量生成,使用非常方便。 所有的配置都保存在本地,只要配置过一次,下次使用的时候完全可以秒生成JavaBean、MyBaits的Mapper映射配置文件和数据库设计文档,并且还集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆! TableGo v5.8.0版更新震撼发布,此次版本更新如下: 1、新增自定义文件功能,可以自己编写模板生成任意代码的文件。 2、新增数据源配置自动生成功能,项目分库分不用愁,一次搞定所有数据源。 3、公共参数界面新增别名和是否目录直通的配置。 4、生成Bean界面新增是否生成字段注释和重写equals,hashCode,toString方法的配置。 5、MyBatis配置界面新增根据所有字段条件查询数据的选项。 6、新增TableGo使用说明书。 7、更新数据库驱动版本,新版的驱动可能不支持JDK8以下的版本。 8、修复了大量的Bug并进行了一些优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值