日期:2014-05-16 浏览次数:20526 次
一、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