打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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();
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Hibernate工作原理
Hibernate深入理解
Hibernate中SessionFactory配置
使用MyEclipse开发第一个Hibernate程序
Hibernate4实战之第一部分Hibernate入门
Hibernate4.3.x Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服