日期:2014-05-16  浏览次数:20472 次

山寨hibernate第一步——解析配置文件进行数据库驱动

一、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