零点起飞学JavaWeb开发之Hibernate的体系结构及接口.pptx_第1页
零点起飞学JavaWeb开发之Hibernate的体系结构及接口.pptx_第2页
零点起飞学JavaWeb开发之Hibernate的体系结构及接口.pptx_第3页
零点起飞学JavaWeb开发之Hibernate的体系结构及接口.pptx_第4页
零点起飞学JavaWeb开发之Hibernate的体系结构及接口.pptx_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第14章 Hibernate结构分析 Hibernate作为一个数据持续层组件,在Web应用程 序中占据着非常重要的地位。它对JDBC接口进行了 封装,将数据库表和JavaBean对象对应起来,从而 提供给程序员操作数据库的接口。通过本章的学习 ,读者可以全面地掌握Hibernate的配置及其接口的 使用方法,并且能够在实际开发中熟练地使用这些 接口。 14.1 Hibernate体系结构一览 Hibernate可以分为不同的模块,每个模块完成特定 的功能。它们结合在一起去完成Hibernate的功能。 了解Hibernate的体系结构对学习它也是非常重要 的。其体系结构如图所示。 14.2 Hibernate实体对象的生命周 期 Hibernate是完整的对象/关系映射解决方案。使用 Hibernate开发者不必考虑SQL语句的执行,这部分 内容由Hibernate处理,开发者只需要关注JavaBean对 象的状态(state)。Hibernate提供了对象状态管理( state management)的功能,使开发者不再需要理会 底层数据库系统的细节。Hibernate实体对象可以分 为3种状态,下面分别介绍。 14.2.1 瞬态(Transient) 由new操作符创建,且尚未与Hibernate Session 关联 的对象被认定为瞬时(Transient)的。瞬时( Transient)对象和数据库的记录没有任何联系,因而 也不会被赋予持久化标识(identifier)。在应用程序 中,如果没有保持对瞬时(Transient)对象的引用, 它会被垃圾回收器(garbage collector)销毁。 14.2.2 持久态(Persistent) 一旦一个处于瞬时状态的对象和session相关联,它 就转换为持久态(Persistent)。持久的实例在数据 库中有对应的记录,并拥有一个持久化标识( identifier)。持久(Persistent)的实例可能是刚被保 存(save)到数据库的,或者是刚从数据库加载( load)的。在与该session断开连接之前,Hibernate会 检测到处于持久(Persistent)状态的对象的任何改 动,并且在当前操作单元(unit of work)执行完毕 时将对象中的数据与数据库的相关记录同步。 14.2.3 游离态(Detached) 一旦与持久(Persistent)对象关联的session被关闭后 ,对象就变为脱管(Detached)的。在托管期间,该 对象可继续被修改。如果脱管(Detached)对象被重 新关联到某个session上,会再次转变为持久( Persistent)的,这时在脱管期间的任何改动都会被 保存到数据库中。 14.2.4 实体对象的状态转换 在程序中,一个对象的状态总是在不断改变,正因 为这样,才能实现对数据库的操作。Hibernate提供 了很多方法去实现状态转变,下面对常用的状态转 变情况进行分析。 1使对象持久化 一个通过new操作符创建的对象是瞬态的。将一个瞬 态对象与一个session相关联,就可以实现该对象的 持久化。 2装载对象 装载对象一般使用如下所示的两个函数。 load():如果知道一个对象的标识(identifier),则 就可以使用session的load()方法来获取它。load()的另 一个参数是指定类的class对象。该方法会创建指定 类的持久化实例,并从数据库加载其数据。 3查询 如果不知道对象的标识(identifier),但是知道该对 象其他属性的值,则可以使用查询方式获取该对 象。Hibernate支持强大且易于使用的面向对象的查 询语言(HQL),使用该语言可以通过操作 JavaBean来操作数据库。HQL查询要通过 org.hibernate.Query的实例来表达。 4修改持久对象 在一个对象处于持久态时,程序员对该对象属性的 更改在session被刷出(flushed)时会被更新到数据 库对应的记录中。所以这里不需要调用某个特定的 方法(例如update(),设计该方法有另外的目的)将 修改持久化。所以最直接的更新一个对象的方法就 是在session处于打开状态时load()它,然后直接修改 即可。 5修改脱管(Detached)对象 在Web应用中,经常是先通过一个session获取一个持 久化对象,然后该session被销毁,并把此时处于 Detached状态的对象发送到界面层去操作。最后在一 个新的session中保存所做的修改。对于这种情况, Hibernate提供了两个方法保存数据。 Session.update():使用update()方法可以将对持久化 对象的更改保存到数据库中。下面通过一个例子来 讲解如何使用这个方法。 6使用saveOrUpdate()方法 saveorUpdate()方法即可自动分配新持久化标识( identifier)保存瞬时(transient)对象,又可更新/重 新关联脱管(detached)实例。 7删除持久对象 删除持久对象,可以把该对象对应的记录从数据库 中删除,但是程序中仍然可以引用该对象。所以可 以这样理解:删除一个对象就是把该对象由持久状 态转变为瞬时状态,用Session.delete()方法进行删除 操作。 14.3 使用Hibernate API 在应用程序中,需要调用Hibernate API去操作数据库 ,所以它们是很重要的。读者一定要掌握这些接口 的使用方法。下面结合示例去讲解。 14.3.1 使用Configuration类 org.hibernate.cfg.Configuration实例代表了JavaBean类 型到SQL数据库表映射的完整集合,并且也包含所 有对Hibernate属性的设置信息。所以也可以把 Configuration理解为程序员定义的hibernate.cfg.xml文 件在内存中的表示。SessionFactory就是使用 Configuration构建而成的。在程序中可以通过 Configuration类去加载映射信息,以及设置属性值。 14.3.2 使用SessionFactory接口 当所有映射文件被Configuration解析并加载到内存之 后,应用程序必须获得一个用于构造session实例的 工厂。这个工厂将被应用程序的所有session共享。 14.3.3 使用Session接口 一旦SessionFactory创建好,就可以用来缓存所有的 数据库连接,并且可以给程序员提供一个连接去操 作数据库。这时程序员需要做的就是使用 SessionFactory实例创建一个session对象,如下所 示。 Session session = sessions.openSession(); 然后就可以使用session对象进行操作。 14.3.4 使用Transaction接口 Transaction接口可以通过session对象获取。它主要用 来对操作数据库的事务进行管理。一个事务是一个 完整的操作单元,或者全部提交,或者全部回滚到 提交前的状态。在编程中一般调用其commit()和 rollback()方法,它们分别用来提交所有的操作和把 所有的操作回滚到原来的状态。 14.3.5 使用Query接口 Query接口用来执行HQL语句,对数据库进行查询。 这个接口提供了参数绑定、结果集处理以及运行实 际查询的方法。下面对Query接口常用的方法进行讲 解。 1Query的使用方法 一个查询通常在调用list()时才被执行,执行结果会 被装载进内存的一个集合(collection)中。查询返 回的对象处于持久(persistent)状态。如果程序员 知道的查询只会返回一个对象,可使用list()的快捷 方式uniqueResult()。 2迭代式获取结果(Iterating results) 可以使用Query的iterator()方法迭代式获取查询结 果。 可以看出,使用iterate()方法,可以对查询结果进行 遍历。这样就可以在这个过程中进行一些判断,根 据判断的结果决定对这个对象的操作。而这种方式 在普通的查询方法中是无法实施的。 3绑定参数 在进行查询的过程中,有些作为查询条件的常量是 其他变量的值。这时可以使用Query提供的参数绑定 的方法去将变量的值赋给查询条件。 用“?”代表待定的条件常量,然后用setString()方法 把字符串Smith2赋值给它。 4分页操作 在Web应用中,经常需要将查询的结果分页显示出 来,这就要求一次只能取出所有结果的一个子集, 可以通过Query的setFirstResult()和setMaxResults()方 法去实现。 14.3.6 使用Criteria接口 Criteria接口使程序员可以动态地使用一种面向对象 API创建查询,而非在Java代码中嵌入字符串。 14.4 小 结 本章讲解

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论