hibernate的原理和流程分析

来源:互联网 发布:php个人中心源码 编辑:程序博客网 时间:2024/06/05 17:07
  最近由于因为工作需要,开始用到了hibernate,差不多快一年多没怎么碰这个东西了,现在抽点时间整理一下关于这方面的技术博客,也算是让自己重新系统的学习一下吧。
      应用程序可以直接通过Hibernate API访问数据库。Hibernate API中的接口可分为以下几类:
          1.用于配置Hibernate的接口:Configuration。
          2.提供访问数据库的操作(如保存、更新、删除和查询对象)的接口。这些接口包括:Session、Transaction和Query接口。
          3.回调接口:使应用程序接受Hibernate内部发生的事件,并做出相关的回应。这些接口包括:Interceptor、Lifecycle和Validatable。
          4.用于扩展Hibernate的功能接口,如UserType、CompositeUserType和IdentiferGenerator接口。如果需要的话,应用程序可以扩展这些接口。
      Hibernate 核心接口:所有的Hibernate应用中都会访问Hibernate的以下5个核心接口
          一、Configuration接口:对Hibernate进行配置,以及对它进行启动。具体的讲,完成以下工作:
              1.加载配置文件:在Hibernate的启动过程中,Configuration的实例首先定位配置文件的位置,读取这些配置,然后创建一个SessionFactory对象。
              2.动态添加映射文件:利用Configuration在程序中添加XML映射定义文件。
              3.通过Configuration指定配置属性。
          二、SessionFactory接口:
              1.用到一个设计模式---工厂模式,用户程序从工厂类SessionFactory中取得Session的实例。SessionFactory不是轻量级的。它的设计者的意图是让它能在整个应用中共享。典型地来说,一个项目通常只需要一个SessionFactory,但当项目要操作多个数据库时,必须为每个数据库指定一个SessionFactory。
              2.SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。SessionFactroy保存了对应当前数据库配置的所有映射关系,同时也负责维护当前的二级数据缓存和Statement Pool。
              3.一个hibernate.cfg.xml文件与一个SessionFactory相对应。
              4.Configuration负责构建SessionFactory。
              5.SessionFactory 负责创建Session实例。
              SessionFactory的特点:
              1.它是线程安全的,这意味着它的同一实例可以被应用的多个线程共享。
              2.它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建一个单独的SessionFactory实例。
              3.称SessionFactory是重量级的。是因为它需要一个很大的缓存,用来存放预定义的SQL语句以及映射元数据等。
              4.用户还可以为SessionFactoy配置一个缓存插件,这个缓存插件被称为Hibernate的第二级缓存,该缓存用来存放被工作单元读过的数据,将来其他工作单元可能会重用这些数据,因此这个缓存中的数据能够被所有工作单元共享。一个工作单元通常对应一个数据库事务。
          三、Session接口
              1.Session接口是Hibernate应用使用最广泛的接口。Session是Hibernate持久化操作的基础,Hibernate Session之与Hibernate ,相当于JDBC Connection相对于JDBC。
              2.Session也被称为持久化管理器,它提供了和持久化相关的操作,如添加、更新、删除、加载和查询等方法。
              3.Session代表与数据库之间的一次操作。
              4.Session通过SessionFactory打开,在所有的工作完成后,需要关闭。
              Session的特点:
              1.不是线程安全的,因此在设计软件构架时,应该避免多个线程共享一个Session实例。
              2.Session实例是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象。例如,为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。
              3.Session有一个缓存,被成为Hibernate的第一级缓存,它存放被当前工作单元加载的对象。每个Session实例都有自己的缓存,这个Session实例的缓存只能被当前工作单元访问。
             4.Session接口是Hibernate向应用程序提供操作数据库的最主要接口,它提供了基本的保存、更新、删除和查询的方法。
          四、Transaction接口
              1.Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备事务处理功能的。
              2.Transaction接口是Hibernate的数据库事务接口,它对底层的事务接口做了封装,底层事务接口包括:JDBC API、JTA (JavaTransaction API)、CORBA(Common Object Request BrokerArchitecture )API。使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction。
          五、Query和Criteria接口
              1.Query和Criteria接口是Hibernate的查询接口,用于向数据库查询对象,以及控制查询的过程。
              2.Query实例包装了一个HQL(HibernateQuery Language)查询语句,HQL查询语句与SQL查询语句有些相似,但HQL查询语句是面向对象的,它引用类名及类的属性名,而不是表名及表的字段名。
              3.Criteria接口完全封装了基于字符串式的查询语句,比Query接口更加面向对象,Criteria接口擅长于执行动态查询。
          附一张Hibernate执行过程的图。
          

原创粉丝点击