Hibernate框架使用技术简述

开发 后端
如何操作持久化对象就成了主要的技术问题。Hibernate 在处理持久化对象时,没有直接创建和调用持久化对象和它的方法,而是利用 CGLIB 和 Java 反射技术来操纵持久化对象,通过代理的模式,在持久化对象的属性方法被调用的同时穿插外部的代码,甚至利用CGLIB的编程接口来替换持久化类的对象和方法。

 

 

 

(1)持久化对象的操作。

Hibernate的主旨是实现持久化对象与数据库表的映射。

如何操作持久化对象就成了主要的技术问题。Hibernate 在处理持久化对象时,没有直接创建和调用持久化对象和它的方法,而是利用 CGLIB 和 Java 反射技术来操纵持久化对象,通过代理的模式,在持久化对象的属性方法被调用的同时穿插外部的代码,甚至利用CGLIB的编程接口来替换持久化类的对象和方法。这种方式使Hibernate 可以较为容易地处理大量不同类别的持久化对象。

(2)HQL 语言的转换。

Hibernate3.0 基于 antlr 工具设计了 HQL 语言。Hibernate通过解析器解析 HQL 语句,然后分析出其内容并转化为 SQL 语句。借助 antlr 工具,这种转换变得可靠并易于实现。可以在hibernate.cfg.xml中,设置查询语言的转换器工厂,例如下面的属性设置。

  1. <property name="hibernate.query.factory_class">   
  2. org.hibernate.hql.ast.ASTQueryTranslatorFactory   
  3. property> 

 

 

(3)事务服务。

Hibernate没有特别设计自己的事务服务部分,而是借助于JDBC的事务服务,或者通过配置来借用J2EE 服务器内的 JTA 标准事务服务。

(4)XML映射文件。

Hibernate的配置和映射文件的定制主要以XML来实现。DOM4J 工具为Hibernate 提供了处理 XML 文件的解析器,XML 文件在被导入Hibernate后,被配置到Hibernate 的各个属性或者与持久化类对应。通过配置工具,很多属性也可

以在运行状态下进行修改和加载。

(5)执行查询语句。

Hibernate 的Session 仍然依赖于JDBC 的查询接口,封装 JDBC的查询方法,在抽象的层次上同时支持SQL 和 HQL 两种查询语言。

(6)数据库方言。

不同数据库产品的数据类型和查询语句有一定的区别,所以创建和管理数据库资源的语句也往往不尽相同。Hibernate 设计了方言(Dialect)接口来处理这些差异,使针对各种数据库产品的操作得以统一,这也是Hibernate 十分流行的原因之一。

(7)JNDI 服务。

Hibernate自身没有实现JNDI服务,依靠外界提供JNDI服务,通常可以将Hibernate的SessionFactory 对象绑定到 JNDI,或者通过JNDI 获取数据源和其他对象。

(8)缓冲技术。

在 Hibernate中可以使用多种缓冲工具,只要它们实现了CacheProvider 接 口 , 就 可 以 用 于 Hibernate 中 , 其 中 包 括 实 现 OSCache的OSCacheProvider 、 实 现 EHCache 的 EhCacheProvider 、 实 现 SwarmCache 的SwarmCacheProvider 、实现 JBossCache 的 TreeCacheProvider ,以及简单地利用一个Hashtable 来实现的HashtableCacheProvider 。下面的属性设置对应于OSCache。

  1. <property name="hibernate.cache.provider_class">   
  2.        org.hibernate.cache.OSCacheProvider   
  3. property>   

 

 

Hibernate的缓冲机制分为两层。第一层缓冲在 Session中实现,属于事务级别的缓冲,随事务结束而消失。第二层缓冲是在持久化实例的范围内进行缓冲,默认情况Hibernate 使用 EHCache来实现。EHCache不支持集群应用,所以在集群环境下需要将缓冲设置改变为 SwarmCache 或JBossCache 。

(9)连接池。

Hibernate被设计为可以使用多种连接池的系统,只要ConnectionProvider 接口,不同类型的连接池或其他能够提供连接的组件就可以被嵌入到 Hibernate来提供数据库连接。Hibernate中主要包括基于C3P0连接池的C3P0ConnectionProvider和基于Proxool连接池的ProxoolConnectionProvider。与C3P0连接池相关的部分配置属性如下:

(10)事件模型。

  1. <property name="hibernate.connection.provider_class">   
  2.         org.hibernate.connection.C3P0ConnectionProvider   
  3. property>   
  4. <property name="hibernate.c3p0.min_size">8property>   
  5. <property name="hibernate.c3p0.max_size">20property>   
  6. <property name="hibernate.c3p0.timeout">2500property>   
  7. <property name="hibernate.c3p0.max_statements">50property>   

 

Hibernate 设计了一个事件模型,利用这个模型将持久化实体的操

作事件和处理事件的监听器联系起来,为实现 Hibernate的功能提供了一个可扩展的模型。目前Hibernate内的事件包括auto-flush,merge,create,delete,dirty-check,evicflush,flush-entity,load,load-collection,lock,refresh,replicate 和 save-update 等。事件的监听器可以由用户自定义实现,并通过 listener元素声明,例如,下面的这个关于

POLoadListener 的声明。

  1. "load" class="com.weportal.hibernate.POLoadListener">    

责任编辑:金贺 来源: JavaEye博客
相关推荐

2009-09-29 10:37:29

Hibernate持久

2009-09-29 16:41:58

Hibernate S

2009-09-25 12:31:13

Hibernate映射

2009-09-28 13:45:59

Hibernate历史

2009-09-23 09:16:25

Hibernate复合

2009-09-29 17:22:30

Hibernate S

2009-09-29 15:58:22

Hibernate映射

2009-09-24 10:35:10

Hibernate查询

2009-09-28 11:12:52

Hibernate O

2009-09-24 10:15:37

Hibernate查询

2009-09-22 16:04:50

Hibernate连接

2009-06-22 15:52:15

JSF测试框架

2009-09-29 09:44:52

Hibernate事务

2009-09-24 17:28:29

Hibernate S

2009-09-25 16:57:49

Hibernate查询

2009-09-25 14:04:09

Hibernate eHibernate h

2009-09-28 15:24:38

Hibernate V

2009-09-22 13:09:06

Hibernateorm框架

2009-09-24 11:17:32

Hibernate查询

2009-09-02 10:05:22

远程接入
点赞
收藏

51CTO技术栈公众号