您的位置:首页 > 编程语言 > Java开发

【学习笔记】--java通过数据库表名自动生成实体类

2009-04-10 22:20 911 查看
//生产类

package com.yangtb.creatclass;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ParameterMetaData;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 类:创建实体
* 通过表名,创建一个实体
* @author Yang 杨天兵
*时间:20090409
*/
public class CreatClass extends Sql2000 {

//包名
String strpackage ="";
// 数据库表名
String tableName="";

StringBuffer sb = new StringBuffer();
Connection con = null;

ResultSet res = null;
ResultSetMetaData rsmd =null;

public String getTableName() {
return tableName;
}

public void setTableName(String tableName) {
this.tableName = tableName;
}

public String getStrpackage() {
return strpackage;
}

public void setStrpackage(String strpackage) {
this.strpackage = strpackage;
}

public void execute() throws IOException{
con = getCoonnection();
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);
//创建这个类文件strpackage
File file = new File("src"+"/"+newstrpack+"/"+className+".java");
sb.append("package "+strpackage+";/n");
sb.append("");
sb.append("/*/n *");
sb.append("这是一个类:/n *@author yangtianb/n *//n");
sb.append("public class "+className+" {");

sb.append("/n");
for(int i=1;i<rsmd.getColumnCount();i++){
String type = typename(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)+"(){/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)+"("+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) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭数据库连接
closeResultSet(res);
closeConneciton(con);
}

System.out.println(sb);
}

public String typename(String typename){

String tystr=null;
if(typename.equals("varchar")){
tystr="String";
}
if(typename.equals("int")){
tystr="int";
}
else{
tystr="Object";
}
return tystr;
}

}

在上面工程中的类,以后在其他工程中导入这个类,在写入xml传入参数就能得到相应数据库表名的实体

//build.xml

<?xml version="1.0"?>

<project name="project" default="default">

<target name="default" depends="depends" description="--> description">
<taskdef name="test" classname="com.yangtb.creatclass.CreatClass"></taskdef>
<test tableName="Bloginfo" strpackage="entity"></test>
</target>
<target name="depends">
</target>
</project>

记得导入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: