丄諦啲仇魜ヤ
如 果 敌 人 让 你 生 气 , 那 说 明 你 没 有 胜 他 的 把 握!
posts - 6,comments - 56,trackbacks - 1
Hibernate 使用了J2EE 架构中的如下技术:JDBC 、JTA 、JNDI 。其中JDBC 是一个支持关系 数据库操作的一个基础层;它与JNDI 和JTA 一起结合,使得Hibernate 可以方便地集成到J2EE 应用服务器中去。
讨论Hibernate API 接口中的所有方法,只简要讲一下每个主要 接口的功能,如果你想了解得更多的话,你可以在Hibernate 的源码包中的net.sf.hibernate 子包中 去查看这些接口的源代码。下面我们依次讲一下所有的主要接口:
核心接口
以下5 个核心接口几乎在任何实际开发中都会用到。通过这些接口,你不仅可以存储和获得持 久对象,并且能够进行事务控制。
Configuration 接口
Configuration 接口的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动
过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个
SessionFactory 对象。

虽然Configuration 接口在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动
hibernate 时你所遇到的每一个对象。

 
SessionFactory 接口
这里用到了一个设计模式――工厂模式,用户程序从工厂类SessionFactory 中取得Session 的 实例。 令你感到奇怪的是SessionFactory 并不是轻量级的!实际上它的设计者的意图是让它能在整个 应用中共享。典型地来说,一个项目通常只需要一个SessionFactory 就够了,但是当你的项目要操 作多个数据库时,那你必须为每个数据库指定一个SessionFactory 。SessionFactory 在Hibernate 中实际起到了一个缓冲区的作用,它缓冲了Hibernate 自动生成的SQL 语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。
 
Session 接口
Session 接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate 中,实例 化的Session 是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,
因为在客户程序中,可能会不断地创建以及销毁Session 对象,如果Session 的开销太大,会给系
统带来不良影响。但值得注意的是Session 对象是非线程安全的,因此在你的设计中,最好是一个 线程只创建一个Session 对象。

在Hibernate 的设计者的头脑中,他们将session 看作介于数据连接与事务管理一种中间接口。
我们可以将session 想象成一个持久对象的缓冲区,Hibernate 能检测到这些持久对象的改变,并及 时刷新数据库。我们有时也称Session 是一个持久层管理器,因为它包含这一些持久层相关的操作,
诸如存储持久对象至数据库,以及从数据库从获得它们。请注意,Hibernate 的session 不同于JSP
应用中的HttpSession 。当我们使用session 这个术语时,我们指的是Hibernate 中的session,而 我们以后会将HttpSesion 对象称为用户session 。

 
Transaction 接口
Transaction 接口是一个可选的API,你可以选择不使用这个接口,取而代之的是Hibernate 的
设计者自己写的底层事务处理代码。Transaction 接口是对实际事务实现的一个抽象,这些实现包
括JDBC 的事务、JTA 中的UserTransaction 、甚至可以是CORBA 事务。之所以这样设计是能让开
发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移值。

 
Query 和Criteria 接口
Query 接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL 语言或本
地数据库的SQL 语句。Query 经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。


Criteria 接口与Query 接口非常类似,它允许你创建并执行面向对象的标准化查询。
值得注意的是Query 接口也是轻量级的,它不能在Session 之外使用。
 
Callback 接口
当一些有用的事件发生时――例如持久对象的载入、存储、删除时,Callback 接口会通知
Hibernate 去接收一个通知消息。一般而言,Callback 接口在用户程序中并不是必须的,但你要在你
的项目中创建审计日志时,你可能会用到它。

一个重要的术语:Type
Hibernate 的设计者们发明了一个术语:Type ,它在整个构架中是一个非常基础、有着强大功
能的元素。一个Type 对象能将一个Java 类型映射到数据库中一个表的字段中去(实际上,它可以 映射到表的多个字段中去)。持久类的所有属性都对应一个type 。这种设计思想使用Hibernate 有着 高度的灵活性和扩展性。

Hibernate 内置很多type 类型,几乎包括所有的Java 基本类型,例如Java.util.Currency 、
Java.util.calendar 、byte[] 和Java.io.Serializable 。

不仅如此, Hibernate 还支持用户自定义的type ,通过实现接口UserType 和接口
CompositeUserType ,你可以加入自己的type 。你可以利用这种特色让你的项目中使用自定义的诸 如Address 、Name 这样的type,这样你就可以获得更大的便利,让你的代码更优雅。自定义type 在Hibernate 中是一项核心特色,它的设计者鼓励你多多使用它来创建一个灵活、优雅的项目!

策略接口
Hibernate 与某些其它开源软件不同的还有一点――高度的可扩展性,这通过它的内置策略机制 来实现。当你感觉到Hibernate 的某些功能不足,或者有某些缺陷时,你可以开发一个自己的策略 来替换它,而你所要做的仅仅只是继承它的某个策略接口,然后实现你的新策略就可以了,以下是
它的策略接口:

· 主键的生成(IdentifierGenerator 接口)
· 本地SQL 语言支持(Dialect 抽象类)
· 缓冲机制(Cache 和CacheProvider 接口)
· JDBC 连接管理(ConnectionProvider 接口)
· 事务管理(TransactionFactory, Transaction, 和TransactionManagerLookup 接口)
· ORM 策略(ClassPersister 接口)
· 属性访问策略(PropertyAccessor 接口)
· 代理对象的创建(ProxyFactory 接口)
Hibernate 为以上所列的机制分别创建了一个缺省的实现,因此如果你只是要增强它的某个策略
的功能的话,只需简单地继承这个类就可以了,没有必要从头开始写代码。

以上就是Hibernate 的一些核心接口,但当我们真正开始用它进行开发时,你的脑海里可能总
会有一个疑问:我是通过什么方式,并从哪里取得Session 的呢?以下我们就解答这个问题。


创建一个SessionFactory 对象
为了能创建一个SessionFactory 对象,你必须在Hibernate 初始化时创建一个Configuration
类的实例,并将已写好的映射文件交由它处理。这样, Configuration 对象就可以创建一个
SessionFactory 对象,当SessionFactory 对象创建成功后,Configuration 对象就没有用了,你可以简单地抛弃它。如下是示例代码:

Configuration cfg = new Configuration();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session=sessionFactory.openSession();


Transaction ts=session.beginTransaction();

session.save(..);

ts.commit() 
posted on 2007-09-01 14:42 Crying 阅读(638) 评论(0)  编辑  收藏 所属分类: hibernate

只有注册用户登录后才能发表评论。


网站导航: