日期:2014-05-16 浏览次数:20532 次
一、hibernate介绍
????? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
二、为什么要山寨hibernate
????? hibernate的功能强大是毫无疑问的,有了它对数据库的操作都得心应手,为了能够对它有更深入的理解和更好的运用,山寨它绝对是一个比较好的办法,一方面熟悉它了,另一方面在以后做项目的时候对数据库的操作可以直接用自己写的,这样用起来更顺畅
?
三、山寨hibernate第一步——解析配置文件进行数据库驱动
????? 仍然是采用dom4j进行XML文件的解析
???? 整个项目结构如下所示
???? 
??? 配置文件myhibernate.cfg.xml如下所示
???
<?xml version="1.0" encoding="UTF-8"?> <myhibernate-configuration> <session-factory> <property name="connection.password">jwc</property> <property name="connection.username">root</property> <property name="connection.url"> jdbc:mysql://localhost:3306/student </property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <mapping resource="cn/zld/myhibernate/pojo/StudentInfo.hbm.xml" /> </session-factory> </myhibernate-configuration>
??? 对数据库POJO类如下
??
package cn.zld.myhibernate.pojo;
import java.util.List;
/**
* 数据库信息类
* @author Administrator
*
*/
public class DBInfo {
private String driver;//驱动
private String url; //数据库所在地址
private String username; //数据库用户名
private String password; //数据库密码
private List<String> resouces; //映射源
public String toString(){
return "驱动:"+this.getDriver()+" 路径:"+this.getUrl()
+" 用户名:"+this.getUsername()+" 密码:"+this.getPassword()
+" 映射源:"+this.getResouces();
}
//setter & getter 方法
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<String> getResouces() {
return resouces;
}
public void setResouces(List<String> resouces) {
this.resouces = resouces;
}
}
?
数据库连接类如下
package cn.zld.myhibernate.connectdb;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import cn.zld.myhibernate.pojo.DBInfo;
/**
* 数据库连接
* @author 张立冬
*
*/
public class ConnectDB {
private static java.sql.Connection conn=null;
private static DBInfo db=new DBInfo();
private List<String> resources=new ArrayList();
public static void main(String args[]){
try{
ConnectDB te=new ConnectDB();
te.readXML();
te.connectsql();
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 读取XML文件
*/
public void readXML(){
//创建文件对象
java.io.File file=new java.io.File("myhibernate.cfg.xml");
if(file.exists()){
try{
//创建一个读取XML文件的对象
org.dom4j.io.SAXReader reader=new org.dom4j.io.SAXReader();
//创建一个文档对象
org.dom4j.Document document=reader.read(file);
//获取文件的根节点
org.dom4j.Element element=document.getRootElement();
element=element.element("session-factory");
for(java.util.Iterator i=element.elementIterator();i.hasNext();){
//获取节点元素
element=(org.dom4j.Element)i.next();
List<Attribute> attribute=element.attributes();//得到节点的所有属性
Attribute atr=attribute.get(0