Hibernate工作原理及核心接口介绍

       应用Hibernate时,经常会访问HibernateConfigurationSessionFactorySessionTransactionQueryCriteria等核心接口,使用这些接口,可以存储与取出持久化对象或者对事物进行控制。

首先从Hibernate的工作原理开始

Hibernate的初始化

1.读取Hibernate的配置信息--Configuration接口

         Configuration的构造方法,将配置信息(Hibernate.cfg.xml)读入到内存中一个Configuration实例代表Hibernate所有Java类到SQL数据库映射的集合。

         Configuration类时Hibernate的入口,负责在HIbernate初始化是加载默认文件路径下的配置文件信息(hibernate.propertieshibernate.cfg.xml)到内存,并通过他的对象加载指定的映射文件到内存。虽然Configuration接口在整个项目中只扮演一个很小的角色,但它是启动hibernate时的第一个对象,我们也可以自定义配置文件的位置

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

2.创建SessionFactory实例---SessionFactory接口

         读取完配置信息之后,就是把Configuration对象中所有配置信息拷贝到SessionFactory的缓存中,SessionFactory的实例代表一个数据库存储源,创建后不再与Configuration对象关联。

         SessionFactory负责创建Session实例,每个SessionFactory类的实例对应一个数据库,SessionFactory实例是重量级的(因为它占用缓存比较大),它占用很大的缓存,用来存放预定义的SQL语句和映射元数据等,所以每个数据库最后只创建一个SessionFactory实例,在初始化完成后,它的线程是安全的,可以多线程共享。

3.调用SessionFactory创建Session—Session接口

  (1.SessionFactory提供连接:

         Session session = sessionFactory.openSession();

    (2).用户自行提供JDBC连接

         Connection conn = DataSource.getConnection();

         Session s = sessionFactory.openSession();

         SessionHibernate持久化操作的基础,它负责管理所有与持久化相关的操作,例如数据库的存取、事务的管理和对象的生命周期等,Session它不是线程安全的,应避免多个线程共享同一个Session,它占用的缓存很少(轻量级的),创建和销毁不会浪费太多的资源,我们可以将Session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及时刷新到数据库。

     (3).每个Session实例和一个数据库事务绑定—Transaction接口

         通常将一个Session实例和一个数据库事务绑定,也就是说,每执行一个数据库事务操作,就应该创建一个session

         Transaction负责Hibernate的数据库事务,其实Hibernate本身并不具有管理事务的能力,知识对底层事务接口进行了封装,对实际事务的一个抽象,这样做有利于开发者能够使用一个统一的事务操作界面,使得自己项目在不同环境或容器中移植,也可以直接访问底层的事务接口,但是不利于移植。

4.通过Session接口提供的各种方法来操作数据库访问—QueryCriteria接口

         QueryCriteria接口负责hibernate的查询操作

         Query实例封装了一个HQLhibernate query language)查询语句,HQL是面向对象的,它操作的是持久化类的类名和该类的属性名,而SQL操作的是表名和字段名。

         Criteria实例完全封装了字符串形式的查询语句,更适合执行动态查询。

         (1).临时状态 (transient) ,通过new语句刚创建一个对象时当调用Session delete()方法,从Session 缓存中删除一个对象时。不处于Session 缓存中,数据库中没有对象记录。

         (2).持久化状态(persisted)

         Session save()把临时-》持久化状态

         Session load(),get()方法返回的对象

         Session find()返回的list集合中存放的对象

         Session update(),saveOrupdate()使游离-》持久化

         处于Session 缓存中,持久化对象数据库中设有对象记录,Session 在特定时刻会保持二者同步

         (3).游离状态(detached) Session close()方法,Session evict()方法,从缓存中删除一个对象。提高性能。少用。

         不再位于Session 缓存中,游离对象由持久化状态转变而来,数据库中可能还有对应记录。

 

 

 

        

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值