疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

精通Hibernate—Hibernate核心接口


 

   

  应用程序可以通过Hibernate的API访问数据库,Hibernate API中的接口可分为以下几类:

  提供访问数据库的操作(保存、更新、删除、查询)接口,这些接口包括Session、Transaction、Query接口

  用于配置Hibernate的接口:Configuration

  回调接口,使应用程序接受Hibernate内部发生的事件,并做出相关回应,这些接口包括:Interceptor、LifeCircle、Validatable接口

  用于扩展Hibernate功能的接口

  Hibernate内部封装了JDBC、JTA和JNDI。JDBC提供底层的数据库操作,只要用户提供了相应的JDBC驱动程序,Hibernate可以访问任何一个数据库系统,JNDI和JTA使Hibernate能够和J2EE应用服务器集成。下面我们来说说Hibernate的核心接口:

  1、Configuration接口

  Configuration对象用于配置并且根启动Hibernate。Hibernate应用通过Configuration实例来指定对象关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。

  2、SessionFactory接口

  一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例,SessionFactory有以下特点:

  他是线程安全的,这意味着他的同一个实例可以被应用的多个线程共享。

  他是重量级,这意味着不能随便创建或者销毁实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例,如果应用同时访问多个数据库,则需要为每一个数据库创建一个单独的SessionFactory实例。

  之所以称SessionFactory是重量级的,是因为他需要一个很大的缓存,用来存放预定义的SQL语句以及映射元数据等。用户还可以为SessionFactory配置一个缓存插件,这个缓存插件被称为Hibernate的二级缓存,该缓存用来存放工作单元读过的数据,将来其他工作单元可能会重用这些数据,因此这个缓存中的数据能够被所有工作单元共享。一个工作单元通常对应一个数据库事务。

  3、Session接口

  Session接口是Hibernate应用使用最广泛的接口,Session也被称为持久化管理器,他提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。

  session有以下特点:

  不是线程安全的,因此在设计软件架构的时候,应该避免多个线程共享同一个session实例

  Session实例是轻量级的,所谓的轻量级就是他的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常的创建或者销毁Session对象。例如为每一个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。

  session有一个缓存,称为Hibernate的一级缓存,这个Session实例的缓存只能被当前工作单元访问。

  4、Transaction接口

  Hibernate的数据库事务接口,他对底层事务接口做了封装,底层事务包括:

  JDBC API

  JTA(Java Transaction API)

  CORBA(Common Object Request Broker Architecture) API

  Hibernate应用可以通过一致的Transaction接口来声明事务边界,这有助于应用在不同的环境或者容器中移植

  5、Query和Criteria接口

  这两个是Hibernate的查询接口,用于向数据查询对象,以及控制执行查询的过程,Query实例包装了一个HQL(Hibernate Query Language)查询语句,HQL语句与SQL语句有些相似,但HQL语句是面向对象的,他引用类名以及类的属性名,而不是表名和表字段名。Criteria接口完全封装了基于字符串形式的查询语句,比Query接口面向对象,Criteria接口擅长于执行动态查询。

  Session接口的find()方法也具有数据查询功能,但他只是执行一些简单的HQL查询的快捷方法,他的功能远没有query接口强大。