博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的方式由数据库的物理表(TABLE)生成实体类(DTO)
阅读量:4190 次
发布时间:2019-05-26

本文共 7463 字,大约阅读时间需要 24 分钟。

2007年05月29日 16:44:00

步骤:通过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;
}
}

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1629786

你可能感兴趣的文章
企业性能测试解决方案讲义——北京软件行业协会IT 沙龙第107 期主题论坛
查看>>
Windows系统一些计数器
查看>>
闲论学习的三种层次。。。
查看>>
关于视频播放性能测试
查看>>
《LoadRunner性能测试实战》内容简介
查看>>
性能测试调整基础
查看>>
《LoadRunner性能测试实战》前言
查看>>
闲论LoadRunner的协议选择、Winsocket、C/S应用程序
查看>>
关XP把TCP并发链接数限制为10个后对LoadRunner性能测试的影响
查看>>
如何使用web_reg_save_param方法保存的多个参数?
查看>>
淡化优势的成功哲学
查看>>
《LoadRunner性能测试实战》即将出版
查看>>
中国历史上的十大黄金时代
查看>>
做事的态度与工作态度 (转自朱少民老师Blog)
查看>>
光芒国际传媒招聘测试开发工程师
查看>>
朋友公司招聘赴微软Tester,请推荐。。。
查看>>
八种消除沟通上的不良习惯地的方法
查看>>
《Web性能测试实战》性能测试用例模板
查看>>
《Web性能测试实战》性能测试报告模板
查看>>
《Web性能测试实战》性能测试计划模板
查看>>