Hibernate框架使用技术简述

[img]http://dl.iteye.com/upload/attachment/445211/0af5cb78-9c7d-3a23-837b-ece15f2a48d6.jpg[/img]


[img]http://dl.iteye.com/upload/attachment/445213/60888634-9bb0-3a9d-a915-714475edec5e.jpg[/img]

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

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

<property name="hibernate.query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
</property>

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

[size=large](4)XML映射文件。[/size]
Hibernate的配置和映射文件的定制主要以XML来实现。DOM4J 工具为Hibernate 提供了处理 XML 文件的解析器,XML 文件在被导入Hibernate后,被配置到Hibernate 的各个属性或者与持久化类对应。通过配置工具,很多属性也可
以在运行状态下进行修改和加载。

[size=large](5)执行查询语句。[/size]
Hibernate 的Session 仍然依赖于JDBC 的查询接口,封装 JDBC的查询方法,在抽象的层次上同时支持SQL 和 HQL 两种查询语言。

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

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

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

<property name="hibernate.cache.provider_class">
org.hibernate.cache.OSCacheProvider
</property>

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

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

<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<property name="hibernate.c3p0.min_size">8</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">2500</property>
<property name="hibernate.c3p0.max_statements">50</property>

[size=large](10)事件模型。[/size]
Hibernate 设计了一个事件模型,利用这个模型将持久化实体的操
作事件和处理事件的监听器联系起来,为实现 Hibernate的功能提供了一个可扩展的模型。目前Hibernate内的事件包括auto-flush,merge,create,delete,dirty-check,evicflush,flush-entity,load,load-collection,lock,refresh,replicate 和 save-update 等。事件的监听器可以由用户自定义实现,并通过 listener元素声明,例如,下面的这个关于
POLoadListener 的声明。
<listener type="load" class="com.weportal.hibernate.POLoadListener"> </listener>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值