目录 大部分企业应用不得不与他们的后端数据库频繁交互。为了让这种交互成为可能,并且使得交互变得有效而迅捷,企业应用开发者在应用和底下的数据库之间创建了一个“持久层”(persistence layer)。这个数据库负责存储从应用到数据库的数据,也负责数据的检索、更新和删除。在基于J2EE的企业应用中,组成这个持久层的Java类既可以映射对象到数据,也可以映射数据到对象。这个持久层使用JDBC、实体beans 、JDO等等之类的工具通常都可以建立。 这就是Hibernate 最拿手的地方。Hibernate 是一个开源对象/与持久性和查询相关的框架。目前在版本2.1.1中, Hibernate 是一个ODMG3 interface ,只要有Lesser GNU Public License (LGPL)就可以从hibernate.org 处免费下载。 ODMG3 是由对象数据管理小组(ODMG)开发的规范,ODMG 是一个由不同的投资商和兴趣小组为开发用于对象数据库和对象相关的映射产品的可移植性规范而结成的联盟。该规范推动了在不止一个产品上运行的可移植应用程序的开发。要了解更多信息请看链接. Hibernate 帮助基于普通的Java对象模型的持久对象的创建,从而允许持久对象拥有复杂的结构如混合类型、集合和属性,还可以拥有用户自定义的类型。现在这些持久对象可以有效的反映出底层数据库模式的复杂结构。Hibernate 依赖于“运行期反射”。 “运行期反射”在运行期收集关于对象和它们相应的数据库映射的信息,这就废除了持久层内对象数据库映射的硬编码。这样,Hibernate使得持久层以持久层代码的最小修改就能够适应底层数据库模式的任何未知变化。反射是核心Java的一个特征,它促使Java代码发现关于所装载的类的域、方法和构造器。反射允许使用反射的域、方法和构造器,在安全限制内,运行对象上的底层配对物。要了解更多信息请看链接。 Hibernate 自动将持久层扩展到更大的范围,使用它内建的设备CodeGenerator 和 SchemaExport 就可以完成,从而大大的降低了硬编码的故障率。Hibernate 也提供了易于使用的Hibernate Query Language (HQL),它是作为“到SQL的最小化面向对象扩展”而设计的一种丰富的查询语言。HQL 推动了数据库类型独立查询的编写,数据库类型独立查询在运行期内可以转换成底层数据库的本地SQL方言。该方法保证了底层数据库类型改变时(如从Oracle 变为PostgreSQL )代码中的查询不受影响。 为了提高效率,Hibernate包括了一些策略,如与数据库交互时的多重最优化,包括对象的缓存、有效外部连接的获取、必要时SQL语句的执行。Hibernate的过程开销比JDBC少10%。 · 从SourceForge处下载Hibernate源代码的最新版本(如文件hibernate-2.1.1.zip或者hibernate-2.1.1.tar.gz)。 而且,请看hibernate.org 上的Download Overview 以备参考。 · 解压源代码文件,将内容释放到想要的目录下(最好是application development directory)。现在,给定的目录将包含Hibernate自己的JAR 库hibernate2.jar,以及包括两个重要目录lib 和src 的其他目录。lib 目录包含用于代码生成、ODMG、dom4j、日志等等的第三组织的库。src 目录包含持久层的源文件。 · 添加hibernate2.jar 和其他JAR 库的相应路径到lib 目录下,对于应用程序的开发来说,到达应用的类路径是有必要的。 · 定位用于将要使用的数据库(如用于DB2 UDB的db2java.zip)的JDBC 驱动,添加他的路径到全局类路径。 现在,Hibernate已经为开发给定应用的持久层做好准备。下面部分探索了完成该任务的必要步骤。 在src 目录下创建名为hibernate.properties 的属性文件,并且将它的路径添加到应用的类路径中就可以完成Hibernate 的配置。该属性文件由Hibernate 用来连接到数据库、生成模式和获得其它特定数据库信息的属性组成。要将底层数据库内的变动反射到整个应用,只需要修改该文件内的属性值。Listing 1 给出了一个简单的例子,这些属性中的大部分属性都是可以自我说明的。 注意: 现在Hibernate也可以使用存在于src 目录下,名为hibernate.cfg.xml 的简单XML文件来配置。该文件的结构与hibernate.properties 非常类似,并且具有相同的功能。Listing 2给出了一个例子。 · 准备用来初始化和在恰当位置上运行Hibernate 的代码 映射文档是用来定义持久数据和需要时保存关于对象的持久域、关联、子类和代理的XML文档。对于每个持久对象和以名字class_name.hbm.xml保存的文件来说,都要创建一个映射文档。在class_name.hbm.xml中class_name就是对象的类名。Listing 3给出了一个映射文档Event.hbm.xml。 映射文档在应用启动时编译,它可为Hibernate 提供关于持久对象的相应类、它们的结构、它们应该映射到哪个数据库表格、以及如何映射的信息。Hibernate 也使用这些映射文档,分别利用内建设备SchemaExport和CodeGenerator来生成相应的数据库模式和stubJava类。 生成stub类 在创建了映射文档之后这个任务就变得简单的多。stub类的创建使用Hibernate的内建设备 CodeGenerator ,执行一个简单的命令就可以完成。,命令的语法如下:
它为classpath、options、和mapping_files参数提供了恰当的值。Listing 4显示了使用Listing 3中给出的映射文档生成的stub文件。 生成数据库模式 要使用Hibernate的 SchemaExport 来生成数据库模式,在提交了用于参数的恰当值之后执行下列命令:
他为classpath、options、和mapping_files 参数提供了恰当的值。下图显示了使用Listing 3中给出的映射文档而生成的模式。
Figure 1: 使用Listing 3中给出的映射文档而生成的模式的外形 初始化和运行Hibernate 要初始化和运行hibernate,需要采取以下步骤: · 在恰当的类中,例示和组装想要的持久对象 · 在应用启动时使用net.sf.hibernate.cfg.Configuration 对象获取net.sf.hibernate.SessionFactory 对象 · 调用SessionFactory 对象上的openSession() 方法来打开net.sf.hibernate.Session · 保存想要的对象,关闭Session. Listing 5显示了如何使用一个简单的类来实现上述步骤。现在,应用已经是完整的,在执行时,可以保存想要的对象到底层数据库中,目的是为了让他们具有持久性。 通过将持久层的生成自动扩展到一个更大的范围,Hibernate 可帮助减轻开发者可达95%的普通的与持久性相关的编码工作。 |
使用Hibernate 的O/R 映射(转)
最新推荐文章于 2024-09-21 11:30:16 发布