论文- 用 hibernate 和 spring 开发持久层

上传人:jiups****uk12 文档编号:39451352 上传时间:2018-05-15 格式:DOC 页数:18 大小:202.50KB
返回 下载 相关 举报
论文- 用 hibernate 和 spring 开发持久层_第1页
第1页 / 共18页
论文- 用 hibernate 和 spring 开发持久层_第2页
第2页 / 共18页
论文- 用 hibernate 和 spring 开发持久层_第3页
第3页 / 共18页
论文- 用 hibernate 和 spring 开发持久层_第4页
第4页 / 共18页
论文- 用 hibernate 和 spring 开发持久层_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《论文- 用 hibernate 和 spring 开发持久层》由会员分享,可在线阅读,更多相关《论文- 用 hibernate 和 spring 开发持久层(18页珍藏版)》请在金锄头文库上搜索。

1、用用 HibernateHibernate 和和 SpringSpring 开发持久层开发持久层摘摘 要要:在本文中,用一个真实世界的例子向您介绍两个最激动人心的企业新技术。Hibernate 是一个对象关系映射工具,而 Spring 是一个 AOP 框架和 IOC 容器。介绍了如何结合这两者,为企业应用程序构建一个事务持久层。在本文中,通过具体介绍使用 Hibernate 和 Spring 在企业应用程序中构建一个事务持久层,您会认识到这些技术。关键词关键词: AOP 框架;IOC 容器;事务持久层;对象关系映射Develop a persistence layer using Hibern

2、ate and SpringHU Chang-longInformation Engineering Institute, University of China Geosciences, Whuhan Hubei 430074 Abstract: In this article,we uses a real-world example to introduce you to two of the most exciting new technologies for the enterprise. Hibernate is an object-relation mapping tool and

3、 Spring is an AOP framework and IOC container. Follow along as we shows you how to combine the two to build a transactional persistence tier for your enterprise applications. Together, these two technologies will provide the foundation of your development efforts in this article. Youll use Hibernate

4、 to map some persistent objects to a relational database and Spring to make Hibernate easier to use and provide declarative transaction support. Key words: AOP framework; IOC container; transactional persistence; ORM;1 1、引言、引言Hibernate 是 Java 平台上的一种流行的、容易使用的开放源代码对象关系(OR)映 射框架。Spring 是一个 AOP 框架和 IOC

5、容器。这两种技术一起提供了本文中介绍的开发 工作的基础。将使用 Hibernate 把一些持久性对象映射到关系数据库中,用 Spring 使 Hibernate 更容易使用并提供声明性事务支持。由于为示例类编写测试代码时使用了 DbUnit,我们还附带介绍了一点 TDD (测试驱动的开发)的内容。 我们将首先介绍两种开发技术,然后分析例子。 1.11.1HibernateHibernate 简介简介 Hibernate 是 Java 平台上的一种全功能的、开放源代码 OR 映射框架。Hibernate 在许多方面类似于 EJB CMP CMR (容器管理的持久性/容器管理的关系)和 JDO(J

6、ava Data Objects) 。与 JDO 不同,Hibernate 完全着眼于关系数据库的 OR 映射,并且包括 比大多数商业产品更多的功能。大多数 EJB CMP CMR 解决方案使用代码生成实现持久性代 码,而 JDO 使用字节码修饰。与之相反,Hibernate 使用反射和运行时字节码生成,使它 对于最终用户几乎是透明的(以前 Hibernate 的实现只使用反射,它有助于调试,当前版 本 Hibernate2.1.2 保留了这种选项) 。 Hibernate 可以模拟继承(有几种方式) 、关联(一对一或者一对多、containment 和 aggregation)和 compo

7、sition。我将在本文中讨论每种关系类型的几个例子。 Hibernate 提供了一种称为 Hibernate Query Language (HQL) 的 查询语言,它类似于 JDO 的 JDOQL 和 EJB 的 EJB QL,尽管它更接近于前者。但是 Hibernate 没有就此 止步:它还可以进行直接的 SQL 查询和/或使用 object criteria 很容易地在运行时构成 查询条件。在本文的例子中我将只使用 HQL。 与 EJB CMP CMR 不同,Hibernate 像 JDO 一样可以在 J2EE 容器内部或者外部工作, 这可以让那些进行 TDD 和敏捷开发的人受益。 1

8、.21.2HibernateHibernate 总览总览 对 Hibernate 非常高层的概览: 这幅图展示了 Hibernate 使用数据库和配置文件数据来为应用程序提供持久化服务 (和持久化的对象) 。 让我们更细致地观察一下运行时的体系结构。 挺不幸的,Hibernate 是比较复杂的, 提供了好几种不同的运行方式。我们展示一下两种极端情况。轻型体系中,应用程序自己 提供 JDBC 连接,并且自行管理事务。这种方式使用了 Hibernate API 的一个最小子集。 全面解决体系中,对于应用程序来说,所有的底层 JDBC/JTA API 都被抽象了, Hibernate 会替你照管所有

9、的细节。 下面是图中一些对象的定义: SessionFactorySessionFactory ( (net.sf.hibernate.SessionFactory) ) 对编译过的映射文件的一个线程安全的,不可变的缓存快照。它是 Session 的工厂。 是 ConnectionProvider 的客户。 可能持有事务之间重用的数据的缓存。 会话,会话,SessionSession ( (net.sf.hibernate.Session) ) 单线程,生命期短促的对象,代表应用程序和持久化层之间的一次对话。封装了一个 JDBC 连接。也是 Transaction 的工厂。 持有持久化对象的缓

10、存。 持久化对象(持久化对象(PersistentPersistent Object)Object)及其集合及其集合(Collection)(Collection) 生命期短促的单线程的对象,包含了持久化状态和商业功能。它们可能是普通的 JavaBeans,唯一特别的是他们现在从属于且仅从属于一个 Session。 临时对象临时对象(Transient(Transient Object)Object)及其集合(及其集合(CollectionCollection) 目前没有从属于一个 Session 的持久化类的实例。他们可能是刚刚被程序实例化,还 没有来得及被持久化,或者是被一个已经关闭的 S

11、ession 所实例化的。 事务,事务,TransactionTransaction ( (net.sf.hibernate.Transaction) ) (可选) 单线程,生命期短促的对象,应用程序用它来表示一批工作的原子操作。是 底层的 JDBC,JTA 或者 CORBA 事务的抽象。一个 Session 可能跨越多个 Transaction 事务。ConnectionProviderConnectionProvider ( (net.sf.hibernate.connection.ConnectionProvider) ) (可选)JDBC 连接的工厂和池。从底层的 Datasource

12、 或者 DriverManager 抽象而来。 对应用程序不可见。 TransactionFactoryTransactionFactory ( (net.sf.hibernate.TransactionFactory) ) (可选)事务实例的工厂。对应用程序不可见。 在上面的轻型结构中,程序没有使用 Transaction / TransactionFactory 或者 ConnectionProvider API,直接和 JTA/JDBC 对话了。 1.31.3持久化对象标识(持久化对象标识(PersistentPersistent ObjectObject IdentityIdentit

13、y ) 应用程序可能同时在两个不同的 session 中存取同一个持久化对象。然而,两个 Session 实例是不可能共享一个持久化类的实例的。有两种不同的用来辨别对象是否相同 的方法。 PersistentPersistent IdentityIdentity,持久化辨别,持久化辨别 foo.getId().equals( bar.getId() ) JVMJVM IdentityIdentity, JVMJVM 辨别辨别 foo=bar 对于同一个特定的Session 返回的对象来说,这二者是等价的。然而,当程序并行在 两个不同的 session 中访问含义上“相同” (持久化辨别)的商业

14、对象时,两个对象实例从 JVM 的角度上来看却是“不同”的(JVM 辨别) 这种方式把并行访问(应用程序不需要对任何商业对象进行同步,只要求遵循每个 Session 一个线程的原则)和对象辨别(在应用程序的一个 session 之中,可以安全的用= 来比较对象)的难题留给了 Hibernate 和数据库。 1.41.4JMXJMX 集成集成 JMX 是用来管理 Java 组件的 J2EE 标准。Hibernate 可以被标准的 JMX Mbean 管理,但 是因为大多数程序还没有支持 JMX,Hibernate 也支持一些非标准的配置方式。 请查阅 Hibernate 网站,可以得到关于如何在

15、 JBOSS 中把 Hibernate 配置成为一个 JMX 组件的更多信息。 1.51.5JCAJCA 支持支持 Hibernate 也可以被配置成为一个 JCA 连接器。更多细节,请参阅网站。 1.61.6SpringSpring 简介简介 Spring 既是一个 AOP 框架、也是一个 IOC 容器。对象最好的地方是可以替换它们,而 Spring 最好的地方是它有助于您替换它们。有了 Spring,只要用 JavaBean 属性和配 置文件加入依赖性(协作对象) 。然后可以很容易地在需要时替换具有类似接口的协作对象。Spring 为 IOC 容器和 AOP 提供了很好的入口(on-ram

16、p) 。因此,不需要熟悉 AOP 就可以理解本文中的例子。所需要知道的就是将要用 AOP 为示例应用程序声明式地添加事 务支持,与使用 EJB 技术时的方式基本相同。要了解 IOC 容器、AOP 和 Spring 的更多 内容,请参阅 参考资料。 简单地说,AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们 插入到应用程序代码中。使用 AOP 后,公共服务(比如日志、持久性、事务等)就可以分 解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。 正如单词 倒置 所表明的,IOC 就像反过来的 JNDI。没有使用一堆抽象工厂、服务定位器、 单元素(singleton)和直接构造(straight construction) ,每一个对象都是用其协作对 象构造的。因此是由容器管理协作对象(collaborator) 。 1.71.7SpringSpri

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号