首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring Framework 與 IBM Data Studio pureQuery 整合實戰指南

     編輯:Java 相關知識

前言

IBM Data Studio 中內建的 pureQuery 是新一代 Java 資料庫存取開發平台,其簡潔的 API 與整合工具不僅大幅提升開發效率,更能引導開發者遵循最佳實踐,從而獲得更優的應用程式效能。Spring Framework 作為開源的 Java/J2EE 應用框架,提供事務管理、資源管理及 DAO 階層架構等進階資料存取特性。將兩者整合,能帶來更簡潔的應用程式開發與維護體驗。本教學將逐步引導您建置具備 Spring 資料存取功能的 pureQuery 應用程式。

教學目標

  • 使用 IBM Data Studio Developer 建立簡單的 Java 資料存取應用程式,並存取 DB2 範例資料庫
  • 使用 Spring JdbcTemplate 實作相同功能的應用程式
  • 結合 Spring 建立 Data Studio pureQuery 應用程式:生成應用、加入 Spring 支援、啟用 pureQuery 靜態綁定特性

先決條件與系統需求

本教學面向具備 Data Studio 或 Eclipse 基礎操作概念的資料庫程式設計人員,無需熟悉 pureQuery 或 Spring Framework。系統需安裝:

  • IBM DB2 9.5 for Linux, UNIX and Windows(含 SAMPLE 資料庫)
  • IBM Data Studio Developer V1.1.x(僅 Developer 版支援靜態綁定)
  • Spring Framework 2.0.x with Dependencies
  • IBM pureQuery 與 Spring 整合工具箱

第一階段:純 JDBC 實作

架構設計

採用 DAO(Data Access Object)設計模式,實現業務邏輯與資料存取分離。應用程式透過介面而非具體類別操作資料庫,結構流程如下圖所示:

結構流程圖

核心類別實作

1. Bean 類別 - Account.java

對應 ACT 表的三個欄位:

package com.test;
public class Account {
    protected short actno;
    protected String actkwd;
    protected String actdesc;
    // 建構子、getter/setter 方法省略...
}

2. DAO 介面 - AccountData.java

package com.test;
import java.util.List;
public interface AccountData {
    public String sql = "SELECT * from act";
    public List<Account> getAccounts();
}

3. DAO 實作 - AccountDao.java

傳統 JDBC 寫法需手動管理連線、例外處理、資源釋放:

public class AccountDao implements AccountData {
    public List<Account> getAccounts() {
        List<Account> actList = new ArrayList<Account>();
        try {
            Connection con = getConnection();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                actList.add(new Account(rs.getShort("ACTNO"),
                    rs.getString("ACTKWD"), rs.getString("ACTDESC")));
            }
            // 手動關閉資源...
        } catch (SQLException sqle) {
            throw new RuntimeException(sqle);
        }
        return actList;
    }
    // getConnection() 方法省略...
}

4. 應用程式 - AccountApp.java

public class AccountApp {
    public static void main(String[] args) {
        AccountData accountData = new AccountDao();
        List<Account> actList = accountData.getAccounts();
        for (Account act : actList)
            System.out.println("ACTNO=" + act.getActno() + " ACTKWD=" + act.getActkwd() + " ACTDESC=" + act.getActdesc());
    }
}

專案建置與執行

在 Data Studio 中建立 Java 專案「DSJdbc」,加入 DB2 JDBC 驅動程式(db2jcc.jar、db2jcc_license_cu.jar),匯入四個 Java 檔案至 com.test 套件,執行 AccountApp.java 即可在主控台看到查詢結果。

專案結構 執行結果

第二階段:Spring JdbcTemplate 優化

架構改善

引入 Spring JdbcTemplate 後,DAO 實作大幅簡化,重複的 JDBC 範本程式碼移至 Spring 管理,消除資源洩漏風險,並自動轉換 SQLExceptions。資料來源配置外部化至 XML 檔案,達成 DBMS 無關性。

Spring 架構流程

關鍵修改

簡化的 DAO 實作

public class AccountDao extends JdbcDaoSupport implements AccountData {
    @SuppressWarnings("unchecked")
    public List<Account> getAccounts() {
        JdbcTemplate daoTemplate = this.getJdbcTemplate();
        RowMapper mapper = new RowMapper() {
            public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
                Account act = new Account();
                act.setActno(rs.getShort("ACTNO"));
                act.setActkwd(rs.getString("ACTKWD"));
                act.setActdesc(rs.getString("ACTDESC"));
                return act;
            }
        };
        return daoTemplate.query(sql, mapper);
    }
}

應用程式載入 Spring 配置

public class AccountApp {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext(
            new String[] {"applicationContext.xml"});
        AccountData dao = (AccountData) ac.getBean("ACT_DAO");
        List<Account> actList = dao.getAccounts();
        // 輸出結果...
    }
}

Spring 配置檔 - applicationContext.xml

<beans>
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations"><list><value>jdbc.properties</value></list></property>
    </bean>
    <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>
    <bean id="ACT_DAO" class="com.test.AccountDao">
        <property name="dataSource"><ref bean="DB2DataSource" /></property>
    </bean>
</beans>

連線屬性檔 - jdbc.properties

jdbc.driverClassName=com.ibm.db2.jcc.DB2Driver
jdbc.url=jdbc:db2://localhost:50000/sample
jdbc.username=USERNAME
jdbc.password=PASSWORD

專案建置

建立專案「DSSpring」,除 DB2 驅動外,需加入 Spring 相關函式庫:spring.jar、commons-logging.jar、commons-dbcp.jar、commons-pool.jar。配置檔放置於專案根目錄。執行結果同純 JDBC 版本。

Spring 專案結構

加入宣告式事務管理

在 applicationContext.xml 中加入:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="DB2DataSource"/>
</bean>

第三階段:pureQuery 與 Spring 整合

pureQuery 應用程式自動生成

  1. 建立資料庫連線至 SAMPLE 資料庫
  2. 建立 Java 專案「PQSpring」,右鍵選擇「Add pureQuery Support」,關聯現有連線
  3. 在 Database Explorer 中右鍵 ACT 表選擇「Generate pureQuery Code」,設定套件名 com.test、類別名 Account,勾選生成介面、測試類別、連線資訊
  4. 於 Bean Fields 對話框選擇欄位,SQL Statements 對話框選擇「Select all rows」

新增連線 ACT 表 生成 pureQuery 代碼 SQL 語句選擇

自動生成的檔案

  • Account.java - Bean 類別
  • AccountData.java - 介面(含 getAccounts() 方法)
  • AccountDataImpl.java - DAO 實作(位於 pureQuerysrc 資料夾,自動維護)
  • AccountDataTest.java - 測試應用程式

執行 pureQuery 應用程式

AccountDataTest.java 需密碼參數,建立執行配置於 Arguments 分頁輸入密碼,執行即可查看結果。

執行配置

加入 Spring 支援

pureQuery-Spring 整合工具箱(Key MOD-415)提供三個檔案:pureQuerySpring-samples.zip、pureQuerySpring_src.zip、spring-pdq.jar。將 Spring 函式庫與 spring-pdq.jar 加入專案建置路徑。

整合後專案結構

修改 Spring 配置使用 pureQuery Factory

<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>

新增 Spring 測試程式 - SpringTest.java

public class SpringTest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext(
            new String[] {"applicationContext.xml"});
        AccountData accountData = (AccountData) ac.getBean("ACT_DAO");
        Iterator<Account> Acts = accountData.getAccounts();
        while (Acts.hasNext()) {
            Account o = Acts.next();
            System.out.println("Act No=" + o.getActno() + " key=" + o.getActkwd() + " desc=" + o.getActdesc());
        }
    }
}

執行 SpringTest.java 即可看到相同結果,且未修改任何 pureQuery 生成代碼。

整合執行結果

啟用 pureQuery 靜態綁定

pureQuery 靜態綁定可將動態 SQL 轉為靜態 SQL,透過套件授權機制提升效能與安全性。操作步驟:

  1. 右鍵專案選擇「Bind pureQuery Application」,主控台顯示綁定成功訊息
  2. 為 SpringTest.java 建立執行配置,於 VM 參數加入:-Dpdq.executionMode=STATIC
  3. 套用並執行,應用程式即以靜態 SQL 模式運作

靜態綁定執行配置

結語

IBM Data Studio 的 pureQuery 大幅提升資料庫程式開發產能與執行效能。透過 pureQuery-Spring 整合工具箱,可為 pureQuery 應用程式導入 Spring 的宣告式事務管理、錯誤處理、資源管理等企業級特性,實現開發效率與執行效能的雙重提升。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved