使用基于持久性的框架开发DB2应用程序

ZDNet软件频道 时间:2008-09-22 作者: Naveen Balani | 论坛整理 我要评论()
本文关键词:框架 DB2 应用程序 DB2
Java Data Object(JDO) API 是标准、基于接口的持久性 Java 模型抽象,可以直接把 Java 域模型实例保存到数据存储。JDO 是作为 Java Specification Request 的一部分开发的。
JDO、JDBC 和 Hibernate

  JDO 简介

  Java Data Object(JDO) API 是标准、基于接口的持久性 Java 模型抽象,可以直接把 Java 域模型实例保存到数据存储。JDO 是作为 Java Specification Request 的一部分开发的。

  开发应用程序时,程序员可以用 Java 编程语言编写代码,透明地访问底层数据存储,而不需要编写特定于数据库的代码。JDO 技术的特性有:
  • 可移植性:用 JDO API 编写的应用程序可以运行在多个实现上,不需重新编译或修改源代码。
  • 数据库独立性:用 JDO API 编写的应用程序独立于底层数据库。
  • 专注于域模型:程序员现在可以专注于他们的域模型,把持久性的细节问题留给 JDO 实现处理。
  • 高性能:程序员可以把持久性的细节委托给 JDO 实现,JDO 实现能够优化数据访问模式,从而获得最佳性能。

  JDBC 简介

  Java Database Connectivity(JDBC)API 是作为 Java 2 标准版(J2SE)和 Java 2 企业版(J2EE)平台的关键部分出现的。它是 Java 语言以编程方式访问关系数据库的基于标准的首要机制

  JDBC API 为程序员提供了极大的灵活性,它提供了对数据库访问和缓存管理的直接控制。JDBC API 是项成熟的技术,是一种完善且已得到充分认识的 API,因而得到业内的广泛认同。

  当前的 JDBC 版本(3.O)对旧版本进行了许多必要的改进。DB2 8 及之后的版本完全支持 JDBC 3.0 API。许多特性,例如从数据库检索自动生成键的能力、打开多个结果集的能力、改进的连接和语句池等都是 JDBC 3.0 中值得称道的新能力。例如,清单 1 显示了用 JDBC 3.0 检索自动生成键的代码片段:

  清单 1. JDBC 自动生成键

Statement stmt = conn.createStatement();
//Obtain the generated` key from query.
stmt.executeUpdate("INSERT INTO Accounts " +
 "(account_name, balance) " +
 "VALUES ("Smith Savings Account", 500.00)",
 Statement.RETURN_GENERATED_KEYS);

ResultSet rs = stmt.getGeneratedKeys();
 if ( rs.next() ) {
  // Retrieve the auto generated key(s) i.e account_id.
  int accountIdkey = rs.getInt(1);
 }

  Hibernate 简介

  Hibernate 是个强大的、高性能的对象/关系持久性和查询服务。Hibernate 支持开发符合面向对象风格的持久性类,包括关联、继承、多态、复合和集合。Hibernate 允许您用它自己的可移植 SQL 扩展(HQL)表示查询,也可以用纯粹的 SQL 或面向对象方式和示例 API 表示。与其他许多持久性解决方案不同,Hibernate 没有使您失去使用 SQL 的力量,从而保证了在关系技术上的现有投资和知识一直有效。

  Hibernate 是专业的开放源码项目,比起其他持久性框架,它是应用和接受最为广泛的框架。像 Spring 这样的框架提供了对 Hibernate 丰富的支持,在这里 Spring 的面向方面编程(AOP)框架为开发人员提供了一种声明式地提供 Hibernate 事务的方式。

  Hibernate 用 XML(*.hbm.xml)文件把 Java 类映射到表,把 Java Beans? 属性映射到数据库表。通过 JDBC 支持全部 SQL 数据库管理系统。Hibernate 可与所有流行的 J2EE 应用服务器和 Web 容器完美集成。

  Hiābernate 与 JDO 的比较

  Hibernate 是一种得到广泛信任和采用的持久性框架,比 JDO 这样的规范更成熟。两个框架在提供持久性时,都可以直接把 Java 域对象保存到持久存储。由于 JDO 是 Java 规范的一部分,而 Hibernate 具有开放源码这样的背景,所以在未来的一段时间内,JDO 仍将在一段时间内得到不同厂商的认同。

  如果在 Hibernate 未来的发行版中,能在现有的开放源码持久性框架上提供对 JDO 的支持,将会很好,这样就可以把 JDO 规范的强大力量与 Hibernate 可靠的开放源码特性结合。

  开始

  在这份教程中,我们将构建一个示例应用程序,它整合了 Spring AOP 的声明式事务处理,以及 Spring 加 Hibernate 的持久性主干。Spring 是个开放源码框架,它的创建是为了解决企业应用程序开发的复杂性问题。Spring 是面向控制和面向方面的容器框架的轻量级版本。 Spring 框架提供了 AOP 框架、JDBC DAO 抽象、与 ORM 框架(像 JDO、Hibernate 和 IBATIS SQL 映射)的集成,带有声明式事务支持以及构建 Web 应用程序的全功能 MVC 框架

  Spring 的功能可以用于任何 J2EE 服务器,多数功能也可以用于非托管环境。Spring 的一个核心重点就是允许使用未绑定到特定 J2EE 服务上的可重用业务和数据访问对象。这类对象可以跨 J2EE 环境(Web 或 EJB)、独立应用程序、测试环境等重用,毫无困难。

  我们的示例应用程序代表一个示例企业,其中包含多个部门和员工。我们的示例应用程序需要创建一个名为 orgdb 的 DB2 数据库,这也是即将介绍的第一步。 SampleOrgDB 容纳部门和员工信息。假设部门和员工之间的关联是 1:N。

  创建示例数据库

  本节创建示例企业应用程序要使用的示例数据库。创建容纳部门和员工信息的示例 orgdb 数据库。创建源表的方法如下:

  在 Windows 命令行提示符下,输入 DB2cmd。

  输入以下语句,创建所需数据库:

  DB2 create database orgdb

  按下 Enter 键。

  现在我们已经创建好了企业数据库。容纳部门和员工应用程序的表将由示例 Hibernate 应用程序创建。

  构建示例应用程序

  这一节用 Spring AOP 和 Hibernate 构建并逐步检查示例企业应用程序,程序将在 DB2 数据库中保存一个 Java 对象。应用程序允许企业添加部门和属于这些部门的员工。

  为数据库交互实现 DOA(数据访问对象)模式。把 Spring AOP 的 TransactionProxyFactoryBean 设置为拦截方法调用,并声明式地把事务上下文应用到任何事务密集型操作的 DOA 上。

  DB2 设置 JDBC 数据源和 HibernateSessionFactory

  在 Spring 框架中,JDBC DataSource 或 Hibernate SessionFactory 这样的资源在应用程序上下文中可视为 bean。需要访问资源的应用程序对象只要通过 bean 引用检索到这类预定义实例的引用即可(下一节将更详细地介绍这方面的内容)。在 清单 2 中,可以看到从示例应用程序摘录的一段代码:XML 应用程序上下文定义,显示了如何设置 JDBC DataSource 及其上的 Hibernate SessionFactory。

  清单 2 显示了如何为示例应用程序数据库(DB2)配置数据源 bean(exampleDataSource)。driverClassName 代表类型 Type 4 DB2 Java 类(com.ibm.DB2.jcc.DB2Driver),url 代表 orgdb 数据库的位置(jdbc:DB2://localhost:50000/orgdb)。将数据库连接 URL 中包含的主机名(localhost)和端口号(50000)改成 DB2 服务器实际安装的位置。Hibernate.dialect 属性的值是 “net.sf.hibernate.dialect.DB2Dialect”,它指定 hiābernate 使用 DB2 术语,表示您处理的是 DB2 数据库。对于其他数据库服务器,这个值会有不同。例如,若要在 Derby 上运行应用程序,值应是 “net.sf.hibernate.dialect.DerbyDialect”。

  exampleDataSource bean 被织入 Spring Hibernate 的 SessionFactory。请注意 *.hbm.xml 表示示例应用程序的 OR 映射文件。

  清单 2. JDBC 数据源和 HibernateSessionFactory 织入

<bean id="exampleDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
<property name="driverClassName"><value>com.ibm.DB2.jcc.DB2Driver</value></property> 
<property name="url"><value>jdbc:DB2://localhost:50000/orgdb</value></property> 
<property name="username"><value>DB2admin</value></property> 
<property name="password"><value>DB2admin</value></property> 
</bean>  

<bean id="exampleHibernateProperties"  
class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
<property name="properties"> 
<props> 
<prop key="hibernate.hbm2ddl.auto">update</prop> 
<prop key="hibernate.dialect">net.sf.hibernate.dialect.DB2Dialect</prop> 
<prop key="hibernate.query.substitutions">true "T", false "F"</prop> 
<prop key="hibernate.show_sql">true</prop> 
<prop key="hibernate.c3p0.minPoolSize">5</prop> 
<prop key="hibernate.c3p0.maxPoolSize">20</prop> 
<prop key="hibernate.c3p0.timeout">600</prop> 
<prop key="hibernate.c3p0.max_statement">50</prop> 
<prop key="hibernate.c3p0.testConnectionOnCheckout">false</prop> 
</props> 
</property> 
</bean> 


<!-- Hibernate SessionFactory --> 
<bean id="exampleSessionFactory"  
class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> 
<property name="dataSource"><ref local="exampleDataSource"/></property> 
<property name="hibernateProperties"> 
<ref bean="exampleHibernateProperties" /> 
</property> 
<!-- Must references all OR mapping files. --> 
<property name="mappingResources"> 
<list> 
<value>Department.hbm.xml</value> 
<value>Employee.hbm.xml</value> 
</list> 
</property> 

</bean> 

框架

DB2

应用程序

DB2


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134