使用 pureQuery 和 Spring Framework
这一节首先展示如何使用 pureQuery 自动生成在前面小节中需要手动创建的代码,然后介绍如何将 Spring 支持添加到 pureQuery 应用程序。最后,将演示一个独特的 pureQuery 特性:静态绑定。
启动 IBM Data Studio 之后,需要创建一个连接示例数据库的连接。
创建一个带有 pureQuery 支持的 Java 项目
创建 pureQuery 代码
生成的代码
下面的文件由以上的步骤自动地生成
getAccounts()
的接口。 getAccount()
方法的应用程序。运行应用程序
自动生成的应用程序 AccountDataTest.java 需要一个数据库密码作为输入参数。因此,最好创建一个配置来运行这个应用程序,如图 10 所示。
这个集成工具箱已经通过 Key MOD-415 提交到 Spring Module with Key MOD-415。就像工具箱本身所描述的一样:“这个特性需求的目标是能够将 pureQuery 和 Spring 结合使用,从而获得 Spring 的 Data 访问特性的优势,比如 Spring 事务管理、资源管理(连接)以及 Data Access Exception 层次结构”。
它包含 3 个文件:
如 前面小节 所述,spring 配置文件 applicationContext.xml 和 jdbc.properties 需要添加到这个项目。在这种情况下,如果您使用相同的连接信息,则 jdbc.properties 就保持不变。需要更改 applicationContext.xml 中的 DAO 定义,表明这是新的 DAO 实现。同样,用一个 propertyConfigurer bean 来表明属性文件的位置。这样做的好处是 DBA 只需要更改属性文件以连接到其他数据源,而不需要更改应用程序本身。
清单 10 是 Spring 配置文件的一个示例,它使用了来自 pureQuery 和 Spring 集成工具箱的类。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <!-- replaces ${...} placeholders with values from properties files --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>jdbc.properties</value> </list> </property> </bean> <!-- Define datasource --> <bean id="DB2DataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- Configure DAO --> <bean id="ACT_DATA" class="java.lang.Class" factory-method="forName"> <constructor-arg value="com.test.AccountData" /> </bean> <bean id="ACT_DAO" class="org.springmodules.purequery.PdqAnnotatedMethodFactory" factory-method="getData"> <constructor-arg ref="ACT_DATA" /> <constructor-arg ref="DB2DataSource" /> </bean> </beans>
接下来将创建一个新的应用程序 SpringTest.java,并通过它加载 Spring 配置文件和调用 DAO 方法。将清单 11 中的代码添加到 com.test 包下的项目。
package com.test; import java.util.Iterator; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringTest { public static void main(String[] args) { //Load the configuratioin file ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[] {"applicationContext.xml"}); //Get the DAO object AccountData accountData = (AccountData)ac.getBean("ACT_DAO"); //Call the getAccounts() method Iterator<Account> Acts = accountData.getAccounts(); //Print out the results while (Acts.hasNext ()) { Account o = Acts.next(); System.out.println("Act No=" + o.getActno() + " key="+o.getActkwd() + " desc="+ o.getActdesc() ); } } }