Hibernate工作原理分析

1.从Hibernate.cfg.xml文件中读取配置信息,并创建SessionFactory

/*用默认配置文件构建Configuration*/

Configuration cfg=new Configuration().configure();

/*手动指定配置文件*/

Configuration cfg=new Configuration().configure(“config.xml”);

/*读取过程

new Configuration():Configuration是hibernate的入口,在实例化的同时hibernate会在classpath中查找hibernate.properties文件,如果文件存在,则将该文件的内容加载到GLOBAL_PROPERTIES中,并验证文件内容的有效性,如果存在不支持的配置参数,则打印警告信息,如果不存在,则打印hibernate.properties not found。

configure():hibernate会在classpath中查找hibernate.cfg.xml文件,如果文件不存在,则打印hibernate.cfg.xml not found。如果文件存在,则进行内容解析,首先访问<session-factory>的子元素,访问顺序为:<property>—<mapping>—<jcs-class-cache>—<jcs-collection-cache>—<collection-cache>

如果hibernate.properties和hibernate.cfg.xml两个文件同时存在,则hibernate.cfg.xml会覆盖hibernate.properties文件中相同的配置信息

*/

/*

SessionFactory属于非轻量级的对象,也就是说一般一个数据库共享一个SessionFactory即可,线程是安全的。而Session是不安全的,所以每个操作都可以共用一个SessionFactory得到Session。

构建SessionFactory要在静态块里,因为它只在类被加载时执行一次

static SessionFactory sessionFactory;

static{

         try{

                 Configuration cfg=new Configuration().configure();

                 sessionFactory=cfg.buildSessionFactory();

         }

}

*/

SessionFactory sessionFactory = cfg.buildSessionFactory();

 

2、从SessionFactory中得到Session

Session session = sessionFactory.openSession();

3、开启事务

Transaction tx = session.beginTransaction();

4、持久化操作

Teacher teacher=new Teacher(); //实例化一个对象,因为未通过session与数据库发生关联,所以此时teacher处于瞬时状态

session.save(teacher);//通过session与数据库发生关联,此时teacher处于持久化状态

/*

在进行持久化操作时,hibernate 会自动在配置文件中<mapping>的子元素中找出Teacher.hbm.xml的位置并读取其配置信息,根据<class>元素对对象进行持久化操作。

*/

5、提交事务


  tx.commit();

6、关闭Session


session.close(); //session关闭,此时teacher与数据库断开关联处于游离状态也称脱管状态

7、关闭SessionFactory


sessionFactory.close();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值