java 生成mysql dto_简单的方式由数据库的物理表(TABLE)生成实体类(DTO) | 学步园

步骤:通过DataBaseMetaData一次获取想要的各个表和相关的列信息。

再分析各个列的类型,生成文件。

---------------------------------------------------------------------------------------------------

非常简单,只需要读一次数据库,同样的原理可以来实现DAO层。

配合几个利用元数据和反射来处理DTO和DAO,即可实现简单的ORM.

正在实验中...

---------------------------------------------------------------------------------------------------

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DatabaseMetaData;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Date;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

import java.util.Map.Entry;

/**

* @author KimmKing

*/

public class test {

private static final String T = "/t";

private static final String CRLF = "/r/n";

static String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";

static String url = "jdbc:odbc:qsoft";

static String user = "sa";

static String password = "q11";

static HashMap map = new HashMap();

static HashMap type = new HashMap();

static {

type.put("4", "int");

type.put("12", "String");

type.put("93", "Date");

type.put("-1", "String");

}

static String path = "d://DTO";

public static void main(String[] args) {

// testODBC();

findTableAndColumn();

Set set = map.entrySet();

for (Iterator iter = set.iterator(); iter.hasNext();) {

Entry element = (Entry) iter.next();

TableBean table = (TableBean) element.getValue();

createDto(table);

}

}

private static void createDto(TableBean table) {

StringBuffer sb = new StringBuffer();

StringBuffer tostring = new StringBuffer();

sb.append("package com.qsoft.dto;");

sb.append(CRLF);

sb.append(CRLF);

sb.append("/**");

sb.append(CRLF);

sb.append(" * @author KimmKing");

sb.append(CRLF);

sb.append(" * create time:" + new Date().toLocaleString());

sb.append(CRLF);

sb.append("*/");

sb.append(CRLF);

sb.append(CRLF);

sb.append("import java.util.Date;");

sb.append(CRLF);

sb.append(CRLF);

String tablename = table.getName();

String classname = convertT2C(tablename);

List list = table.getColumns();

//  tostring.append(classname);

//  tostring.append("[");

sb.append("public class " + classname + " implements IDto {");

sb.append(CRLF);

for (Iterator iter = list.iterator(); iter.hasNext();) {

ColumnBean column = (ColumnBean) iter.next();

String columnname = column.getName().toLowerCase();

String stype = type.get(column.getType() + "").toString();

sb.append(T);

sb.append("private " + stype + " " + columnname + ";");

sb.append(T);

sb.append("//Length:");

sb.append(column.getLength());

sb.append(CRLF);

sb.append(CRLF);

// getter

sb.append(T);

sb.append("public " + stype + " " + getGetter(columnname) + "() {");

sb.append(CRLF);

sb.append(T);

sb.append(T);

sb.append("return " + columnname + ";");

sb.append(CRLF);

sb.append(T);

sb.append("}");

sb.append(CRLF);

sb.append(CRLF);

// setter

sb.append(T);

sb.append("public void " + getSetter(columnname) + "(" + stype

+ " _" + columnname + ") {");

sb.append(CRLF);

sb.append(T);

sb.append(T);

sb.append("this." + columnname + "=_" + columnname + ";");

sb.append(CRLF);

sb.append(T);

sb.append("}");

sb.append(CRLF);

sb.append(CRLF);

sb.append(CRLF);

//

tostring.append("/"," + columnname + "=/" + " + columnname + " + ");

}

String pv = tostring.toString();

pv = pv.substring(2);

//   toString

sb.append(T);

sb.append("public String toString() {");

sb.append(CRLF);

sb.append(T);

sb.append(T);

sb.append("return /"" + classname + "[" + pv +  "/"]/";");

sb.append(CRLF);

sb.append(T);

sb.append("}");

sb.append(CRLF);

sb.append(CRLF);

sb.append("}");

sb.append(CRLF);

File dir = new File(path);

if (!dir.exists())

dir.mkdirs();

File file = new File(path + "//" + classname + ".java");

try {

FileWriter writer = new FileWriter(file);

writer.write(sb.toString());

writer.close();

} catch (IOException e) {

e.printStackTrace();

}

}

private static String convertT2C(String tablename) {

String classname = tablename.substring(1).toUpperCase();

String first = classname.substring(0,1).toUpperCase();

classname = first + classname.substring(1).toLowerCase() + "Dto";

return classname;

}

private static String getSetter(String propertyName) {

String first = propertyName.substring(0, 1).toUpperCase();

String methodName = "set" + first

+ propertyName.substring(1).toLowerCase();

return methodName;

}

private static String getGetter(String propertyName) {

String first = propertyName.substring(0, 1).toUpperCase();

String methodName = "get" + first

+ propertyName.substring(1).toLowerCase();

return methodName;

}

private static void findTableAndColumn() {

try {

Class.forName(driverName);

Connection conn = DriverManager.getConnection(url, user, password);

DatabaseMetaData meta = conn.getMetaData();

ResultSet rs = meta.getColumns(null, null, "c%", null);

while (rs.next()) {

String tablename = rs.getString(3);

TableBean table = (TableBean) map.get(tablename);

if (table == null) {

table = new TableBean();

table.setName(tablename);

map.put(tablename, table);

}

ColumnBean column = new ColumnBean();

column.setName(rs.getString(4));

column.setType(rs.getInt(5));

column.setLength(rs.getInt(7));

table.getColumns().add(column);

}

rs.close();

conn.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException ex) {

ex.printStackTrace();

}

}

private static void testmeta() {

// String sql = "select * from cuser ";

try {

Class.forName(driverName);

Connection conn = DriverManager.getConnection(url, user, password);

DatabaseMetaData meta = conn.getMetaData();

ResultSet rs = meta.getColumns(null, null, "c%", null);

while (rs.next()) {

print(rs);

System.out.println();

}

conn.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException ex) {

ex.printStackTrace();

}

}

private static void print(ResultSet rs) {

try {

int count = rs.getMetaData().getColumnCount();

for (int i = 0; i < count; i++) {

System.out.print(rs.getString(1 + i));

System.out.print("/t");

}

} catch (SQLException e) {

e.printStackTrace();

}

}

private static void testODBC() {

String sql = "select * from cuser ";

try {

Class.forName(driverName);

Connection conn = DriverManager.getConnection(url, user, password);

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

while (rs.next()) {

System.out.println(rs.getString(2));

}

rs.close();

stmt.close();

conn.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException ex) {

ex.printStackTrace();

}

}

private static void print(List list) {

for (Iterator iter = list.iterator(); iter.hasNext();) {

System.out.println(iter.next());

}

}

}

/**

* @author KimmKing

*

*/

public class ColumnBean {

private String name;

private int type;

private int length;

public int getLength() {

return length;

}

public void setLength(int length) {

this.length = length;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getType() {

return type;

}

public void setType(int type) {

this.type = type;

}

}

import java.util.ArrayList;

import java.util.List;

/**

* @author KimmKing

*

*/

public class TableBean {

private String name;

private List columns = new ArrayList();

public List getColumns() {

return columns;

}

public void setColumns(List columns) {

this.columns = columns;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一直以来把数据库转换成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的修改和代码优化调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值