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