用java语言模拟hibernate 表与java bean 的映射机制

[size=large]最近学习hibernate,为了更加理解ORM思想。用java 语言模拟了从数据库表到java bean中的映射,通过数据库的字段信息生成对应的javabean.[/size]

com.xxg.dao 包下的类 。该类主要是得到数据库表的各字段信息,并封装到数据库字段类型bean中,并添加到list中。

package com.xxg.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.xxg.bean.TableType;

public class DateBacDao {


private ArrayList<TableType> list;

//根据数据库的表名得到该数据库表对应的每一个字段的名字以及类型信息
public ArrayList<TableType> gainDateFromOracle (String tableName) throws SQLException
{
list = new ArrayList<TableType>();
Connection conn = null;
conn = DBConn.getConnection();
Statement stat =null;
stat = conn.createStatement();
String sql = "select *from "+tableName;
ResultSet rs = null;
rs = stat.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();//得到结果集字段信息
int columNumber = rsmd.getColumnCount();//得到表的总列数

//遍历每一列,得到每一列的属性名称,属性类型然后将其封装到tabletype 中
for(int i=1;i<=columNumber;i++){
TableType Tt = new TableType(rsmd.getColumnName(i),rsmd.getColumnTypeName(i));

list.add(Tt);

}
DBConn.closeAll(rs, stat, conn);
return list;


}

}


数据表中基本字段信息bean
package com.xxg.bean;

public class TableType {


private String columName;
private String columType;

public String getColumName() {
return columName;
}
public void setColumName(String columName) {
this.columName = columName;
}
public String getColumType() {
return columType;
}
public void setColumType(String columType) {
this.columType = columType;
}
public TableType( String columName, String columType) {
super();

this.columName = columName;
this.columType = columType;
}




}

生成数据库表到实体javabean 的映射类
public class JavaToFile {


private static Map<String, String> javaTypeMappingOracle = new HashMap<String, String>();
private DateBacDao dbc ;

static{

javaTypeMappingOracle.put("NUMBER", "int");
javaTypeMappingOracle.put("VARCHAR2", "String");
javaTypeMappingOracle.put("DATE", "Date");
}
//public static String t_user= "t_user";

public static void main(String[] args) throws SQLException {

//new JavaToFile().diverseFistToUppcase("x");
new JavaToFile().writeJavaToFile("t_bill");

}


// 生成属性
public String gainField(String name) throws SQLException{

//System.out.println("begiain");
String str = "";
dbc = new DateBacDao();
ArrayList<TableType> list = new ArrayList<TableType>();
list = dbc.gainDateFromOracle(name);
//System.out.println(list.size());
for(int i=0;i<list.size();i++){

// System.out.println(str);
str = str+ "\t private " + javaTypeMappingOracle.get(list.get(i).getColumType())+" "+list.get(i).getColumName().toLowerCase()+";\n";
}

// System.out.println(str);
return str;
}

//生成set方法
public String gainSet(String name) throws SQLException
{
String str = "";
dbc = new DateBacDao();
ArrayList<TableType> list = new ArrayList<TableType>();
list = dbc.gainDateFromOracle(name);
for(int i=0;i<list.size();i++){

str = str+"\t public void "+" set"+
diverseFistToUppcase(list.get(i).getColumName().toLowerCase())+
"("+javaTypeMappingOracle.get(list.get(i).getColumType())+" "+list.get(i).getColumName().toLowerCase()+
") {"+"\n "+" \tthis."+list.get(i).getColumName().toLowerCase()+" = "+list.get(i).getColumName().toLowerCase()+
";\n"+"\t}\n";
}
//System.out.println(str);
return str;
}

//生成get方法
public String gainGet(String name) throws SQLException
{
String str = "";
dbc = new DateBacDao();
ArrayList<TableType> list = new ArrayList<TableType>();
list = dbc.gainDateFromOracle(name);
for(int i=0;i<list.size();i++){

str = str+"\tpublic"+" "+
javaTypeMappingOracle.get(list.get(i).getColumType())+" "
+diverseFistToUppcase(list.get(i).getColumName().toLowerCase())+"( )"+" {"+
"\n\n\t return"+ " "+list.get(i).getColumName().toLowerCase()+" ;\t}\n\n";
}
//System.out.println(str);
return str;
}

// 拼装java 文件

public String bornJavaFile(String tableName) throws SQLException{

String javafile = "";
javafile = "public class " + " "+diverseFistToUppcase(tableName)+"{\n"+

gainField(tableName)+"\n"+gainGet(tableName)+"\n"+gainSet(tableName)+"\n}";

//System.out.println(javafile);
return javafile;
}

public void writeJavaToFile(String name) throws SQLException{

try {
FileWriter fw = new FileWriter(new File(diverseFistToUppcase(name)+".java"));
String str = bornJavaFile(name);
//System.out.println(str);
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(str);

bfw.close();
fw.close();

System.out.println("success saving ");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

//将字符串转换成首字母大写
public String diverseFistToUppcase(String str){

String st = "";
if(str.length()>=2){

st = (str.charAt(0)+"").toUpperCase() +str.substring(1);

}
else if(str.length()==1){

st = (str.charAt(0)+"").toUpperCase();
}
//System.out.println(st);
return st;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值