程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2 Magazine:快速數據訪問的捷徑

DB2 Magazine:快速數據訪問的捷徑

編輯:DB2教程

Java 無處不在。如果您是一名應用程序開發人員,那麼您很可能正在使用 Java 進行開發。如果是這樣,您應該知道這樣的開發並非總是那麼有趣。

使用 Java Database Connectivity(JDBC) 創建應用程序需要很多的步驟,其中不少步驟都比較麻煩。您不僅需要創建一個 Java 數據訪問對象層,還需要處理 CRUD(create, replace, update, delete)SQL 操作。為此,通常不得不使用兩套工具:一套用於 Java 開發,另外一套用於數據庫 CRUD 操作。如果有一套工具可以同時處理這兩種工作,不是更方便嗎?IBM 也這麼認為,並著手創建了這樣的工具。這個名為 pureQuery(之前的代碼名稱為“JLINQ”)的新的高性能平台包括用於應用程序的開發工具、API 和高級運行庫。IBM 的 pureQuery 是為簡化訪問數據的應用程序的開發和管理而設計的。它對應用程序生命周期中的開發、部署、管理和治理等各個階段都有幫助(詳見圖 1)。

圖 1. pureQuery 體系結構概覽

DB2 Magazine:快速數據訪問的捷徑

pureQuery 工具、API 和運行時環境提供了對數據庫中的數據以及內存中的 Java 對象的訪問。作為 IBM Data Studio 工具集的一個組件,一個公共的數據庫應用程序開發和管理平台, pureQuery 提供了高級的 Java 數據訪問功能,並真正避免了 JDBC 編程,因為它將查詢語言與 Java 相集成。 

數據訪問 API 的問題

Java 開發人員可以選擇多種 Java 數據訪問 API 來構建應用程序,從 JDBC 到 Java Persistence Architecture(JPA)。這些 API 可以分為兩大類:直接 SQL 訪問和托管對象。每種方法都有其支持者和反對者。圖 2 總結了每種方法的優缺點。

圖2. 幾種數據訪問方法比較

DB2 Magazine:快速數據訪問的捷徑

直接 SQL 訪問很好理解。它便於控制發出的 SQL,從而提高 SQL 的性能。但是,JDBC 開發過程會比較單調乏味,並耗時較長。在直接 SQL 訪問方法學中,Java 程序員必須將結果集從 JDBC 映射到 Java 對象,並創建語句和綁定參數占位符。為獲得最佳性能,開發人員必須掌握 JDBC API,並利用批處理和結果優化等特性。為提高 JDBC 性能,有些人可能會考慮 SQLJ;但是,這種選擇要求開發人員重新編寫數據訪問層。

JDBC 開發的單調乏味促使對象關系映射(ORM) 框架問世,該框架提供一個數據訪問抽象層。利用 ORM 通常可以更輕松地創建數據訪問層。但是,ORM 對發出的 SQL 的控制比較有限,而且,它們給運行時性能問題的診斷加多了一層的復雜性。調優和診斷變得更加困難,因為開發人員無法再控制將什麼樣的 SQL 發送到數據庫;因此,難以更改 SQL 或者決定由哪個應用程序發出 SQL。

IBM 創建了 pureQuery,以解決這些方法的局限性。pureQuery 提供了一個具有 SQL 智能的 Java 編輯器,但是它並不是另一種類 SQL 的語言——它是一種可以以聲明的方式查詢關系數據庫以及 Java 集合和數據庫緩存的語言。擴展的 Java 編輯器包括一個集成的 SQL 編輯器,開發人員可以像編輯 Java 那樣利用代碼完成、驗證和執行輔助等特性。此外,IBM 正在致力於通過 pureQuery 增強對 JPA 的支持。

洞察 pureQuery

pureQuery 簡化了 Java 數據訪問應用程序整個開發周期(開發、部署、管理和問題診斷)中與數據服務器(尤其是對於 IBM 數據服務器)和 Java 對象相關的工作。pureQuery 運行時可以與所有具有 JDBC 驅動程序的數據庫打交道,並提供了與所有版本的 DB2 和 Informix Dynamic Server(IDS)的附加工具的集成。您可以選擇和 JPA(一種 J2EE 標准)或 Spring 和 iBatis 等流行的開源項目一起使用 pureQuery。pureQuery 與最近宣布的 Project Zero 計劃 —— zero.data 中的底層技術——相集成。 pureQuery 技術將 SQL 編輯帶入到 Java 開發環境中。很多與 Java 相關的數據訪問編程任務變得容易很多。它提供了一個良好的環境,可幫助您在開發周期中盡早發現問題,並從數據庫一直追蹤回應用程序源代碼。可以通過相同的 Java API 同時使用靜態和動態 SQL。對靜態 SQL 的支持改善了問題診斷和治理。DB2 DBA 應該理解靜態 SQL 訪問對於應用程序性能、應用程序管理和數據訪問安全(治理)的好處。

pureQuery 簡化並統一了所有數據訪問的實現。它並沒有強迫您使用特定的 API(例如 EJB2、JPA、Spring 或 iBatis),但確實為某些用於訪問數據的已有 API 的實現提供了便利。利用 pureQuery,可以直接在 Java 中編寫數據訪問代碼。在編寫查詢時,可以獲得設計時語法和模式檢查以及更好的工具支持(例如代碼完成/輔助)。

IBM Data Studio 解決方案將很多重復的 JDBC 和對象構造任務自動化。例如,pureQuery 的SQL 智能可以幫助您在開發過程中完成 SQL 語句。

SQL 編輯器集成(如圖 3 所示)包括了以下特性,以提供對語義和語法驗證的支持:

設計時編譯

智能內容輔助

語法著色

圖 3. SQL 編輯器集成

DB2 Magazine:快速數據訪問的捷徑

直接在 Java 編輯器中測試 SQL,這可以提高生產率;您可以在數據庫上快速地測試 SQL,並標記錯誤,就像處理 Java 編程錯誤一樣。

通過使用 pureQuery,可以縮短 Java 編輯-編譯-調試開發周期中的 SQL 周期。您不必等到運行時就可以知道一個查詢字符串是否格式良好,或者是否將返回錯誤。圖 4 顯示了 pureQuery 如何在 Eclipse Java Perspective 中像對待 Java 錯誤一樣標記 SQL 錯誤。

圖 4. Eclipse Java Perspective 中 pureQuery 的錯誤標記

DB2 Magazine:快速數據訪問的捷徑

這種工具集成可以像 Java 開發人員編寫代碼時一樣提供交互式的、智能的代碼輔助和即時 SQL 錯誤警告,從而大幅提升 Java 程序員的生產率。pureQuery 還使開發人員可以查詢內存中不受管的對象。它可以查詢堆上沒有副本或存儲的原始對象。這些對象可以與來自一個數據服務器查詢的結果相連接,因為 pureQuery 使用完全標准的 SQL。例如,清單 1 中的查詢使用 pureQuery 的內存中查詢特性連接兩個 Java 集合。

清單 1. 使用 pureQuery 的內存中查詢 API 連接兩個 Java 集合

Department[ ] depts = ...;
Employee[ ] emps = ...;
Data qoc = DataFactory.getData();
List<Employee> e = data.queryList(“select e.firstname,
e.lastname, e.empno, e.workdept from
?test.Employee as e,?test.Department as d where
e.workdept = d.deptno”,Employee.class, emps, depts);

這裡不管理、復制或更改對象,而是在內存(堆)中訪問它們。注意,? 占位符在 WHERE 子句中用於標識謂詞值,在 FROM 子句中用於標識 Java 集合。

pureQuery 使用常規的 SQL 來查詢內存中的對象。這個功能可以緩存常被訪問的固定數據集,例如美國各州的查找表,然後,可以將這個表與其他數據相連接,以顯示州的全稱,避免與數據庫服務器之間不必要的來回訪問。

pureQuery 另一個有趣的特性是同一個 API 可同時用於 Java 靜態和動態 SQL 數據訪問。在此之前,JDBC 提供動態 SQL 數據訪問,SQLJ 提供靜態 SQL 數據訪問。pureQuery 中對靜態 SQL 的支持可以為應用程序帶來很多好處——提高運行時性能、簡化問題和代碼錯誤的識別,以及提高管理能力。靜態 SQL 可以監視靜態 SQL 包,從而提高可管理性。靜態 SQL 不僅提供最快的數據庫訪問方法,還允許開發人員鎖定數據訪問路徑,以提供更確定的高性能(這對滿足對終端用戶的服務級別保證很重要)。最後,靜態 SQL 提供了更強大的授權模型。在部署時,可以通過運行時配置將相同的 pureQuery 代碼在動態與靜態 SQL 之間切換,從而使開發人員可以在開發時使用動態 SQL 構建應用程序,而在部署時切換到靜態 SQL,而且無需更改代碼。

圖 4. Eclipse Java Perspective 中 pureQuery 的錯誤標記

DB2 Magazine:快速數據訪問的捷徑

這種工具集成可以像 Java 開發人員編寫代碼時一樣提供交互式的、智能的代碼輔助和即時 SQL 錯誤警告,從而大幅提升 Java 程序員的生產率。pureQuery 還使開發人員可以查詢內存中不受管的對象。它可以查詢堆上沒有副本或存儲的原始對象。這些對象可以與來自一個數據服務器查詢的結果相連接,因為 pureQuery 使用完全標准的 SQL。例如,清單 1 中的查詢使用 pureQuery 的內存中查詢特性連接兩個 Java 集合。

清單 1. 使用 pureQuery 的內存中查詢 API 連接兩個 Java 集合

Department[ ] depts = ...;
Employee[ ] emps = ...;
Data qoc = DataFactory.getData();
List<Employee> e = data.queryList(“select e.firstname,
e.lastname, e.empno, e.workdept from
?test.Employee as e,?test.Department as d where
e.workdept = d.deptno”,Employee.class, emps, depts);

這裡不管理、復制或更改對象,而是在內存(堆)中訪問它們。注意,? 占位符在 WHERE 子句中用於標識謂詞值,在 FROM 子句中用於標識 Java 集合。

pureQuery 使用常規的 SQL 來查詢內存中的對象。這個功能可以緩存常被訪問的固定數據集,例如美國各州的查找表,然後,可以將這個表與其他數據相連接,以顯示州的全稱,避免與數據庫服務器之間不必要的來回訪問。

pureQuery 另一個有趣的特性是同一個 API 可同時用於 Java 靜態和動態 SQL 數據訪問。在此之前,JDBC 提供動態 SQL 數據訪問,SQLJ 提供靜態 SQL 數據訪問。pureQuery 中對靜態 SQL 的支持可以為應用程序帶來很多好處——提高運行時性能、簡化問題和代碼錯誤的識別,以及提高管理能力。靜態 SQL 可以監視靜態 SQL 包,從而提高可管理性。靜態 SQL 不僅提供最快的數據庫訪問方法,還允許開發人員鎖定數據訪問路徑,以提供更確定的高性能(這對滿足對終端用戶的服務級別保證很重要)。最後,靜態 SQL 提供了更強大的授權模型。在部署時,可以通過運行時配置將相同的 pureQuery 代碼在動態與靜態 SQL 之間切換,從而使開發人員可以在開發時使用動態 SQL 構建應用程序,而在部署時切換到靜態 SQL,而且無需更改代碼。

先有什麼……

……先有數據庫還是先有應用程序?如果先有應用程序,那麼就采用自上而下的方法設計系統,從對象域模型開始。pureQuery 支持自上而下的方法,可以從對象生成表定義;然後,它幫助您生成域對象域模型相符的 Java 數據訪問模型(持久層)。

另一方面,假設先有數據庫。在此情況下,采用自下而上的方法來設計系統,從一個已有的數據庫開始,pureQuery 可以為之生成一個 Java 數據訪問模型。

但是,有很多已有的系統處於“中間地帶”,數據庫和對象模型都已經存在。對於這種情況, pureQuery 提供了一些工具,可以使用這些工具將 Java 數據訪問模型映射到已有的對象,以及將已有的數據庫映射到 Java 數據訪問模型。

pureQuery 支持兩種風格的 SQL 執行:一種是帶注釋的方法風格,另一種是內聯方法風格。帶注釋的方法風格使用接口中的 Java 注釋或 XML 文件中的 SQL 來定義對象到關系的映射。它創建接口(其中定義了 CRUD 方法)、接口的實現以及表示數據的 Java bean。對於帶注釋的方法風格,接口不會向使用 Java 方法調用的應用程序開發人員顯示任何持久技術。這種方法使用 Java 注釋將 SQL 映射封裝到接口中。而內聯方法風格則直接執行 SQL。例如,下面的代碼是以內聯方法風格使用 employee bean 的一個例子:

清單 2. 內聯方法使用 employee bean

employee = db.queryFirst("SELECT NAME, ADDRESS, PHONE FROM EMP WHERE
NAME=:name", Employee.class,name);

這些工具可以輕松生成基於 Java 集合的表、視圖和存儲過程結果集。

純淨而簡單

pureQuery 為 Java 數據訪問,包括性能和問題診斷提供了一種簡單的編程模型。作為 JDBC 之上很小的一個層,pureQuery 簡化了與 Java 訪問開發相關的大多數常見任務。它還可以比 JDBC 程序更快地執行,因為它封裝了使用類 JDBC 批量更新的“最佳實踐”,利用特定於數據庫的 API 提供比使用標准 JDBC API 情況下更好的性能,以及為開發人員提供最有效的 JDBC 選項。pureQuery 將靜態 SQL 的優點釋放出來,允許在不更改任何代碼的情況下生成靜態 SQL。此外,它還提供對存儲和檢索 Java bean 以及與數據庫之間的來回映射的即開即用的支持。pureQuery 是一種可擴展的平台,擁有可插式的定制的結果處理模式。

結果怎樣?pureQuery 使 Java 中的 SQL 編程像 Java 編程本身一樣有效率。

pureQuery 和它的 IBM Data Studio 同伴 Data Web Services 協力,通過簡化這些通常比較復雜的任務,提高開發人員的效率,並縮短開發周期。請參照參考資源中,與 pureQuery 和 IBM Data Studio 解決方案相關的更多信息。

附錄:Data Web Services

除了 pureQuery 之外,IBM Data Studio 解決方案還包括很多其他的特性。其中一種新特性就是 Data Web Services,它提供了無需編寫任何代碼就能生成訪問數據的 Web 服務的功能。通過使用 Data Web Services,可以將查詢(SQL 或 XQuery)和存儲過程公布為 Web 服務;這些服務可以構成面向服務架構(SOA)解決方案的基礎。

越來越多的公司正在將 SOA 應用於他們的應用程序,並將底層的組件向松散耦合的、基於服務的訪問轉移。在數據訪問端,數年來公司已經通過存儲過程、觸發器等封裝或實現了大量業務邏輯。如果能將這些數據訪問操作和底層的規則利用起來,將它們公布為隨時可用的 Web 服務,就可以幫助加快采納 SOA。目前,通過服務訪問數據庫需要很多應用程序開發方面的專業知識。這需要將 SQL 操作或存儲過程包裝在應用程序代碼中,然後將其部署到某種應用程序服務器上。通常,Web 開發人員不是 SQL 專家,反之亦然,因此開發和部署那樣的應用程序將比較痛苦——最終,也許只能得到一個性能糟糕的應用程序。

Data Web Services 避免了所有的編程。只需通過拖放操作,就可以以 Web 服務的方式啟用數據庫,並生成 SOAP 和 REST(Representational State Transfer)型端點,這些端點可以 GET 或 POST 數據。然後,可以通過任何 Web 服務使用者來訪問數據。Data Web Services 支持各種各樣的端點,為調用這些服務提供了多種客戶機選項,包括 SOAP 和基於浏覽器的客戶機及 Xforms、Html 表單等。

服務生成過程會產生一個 WSDL(Web Service Definition Language)文件,用於描述服務。然後,可以將最終的 Data Web Service 解決方案部署到已有的 Java 應用程序服務器基礎設施上。關鍵的特性包括:

通過拖放操作創建 Web 服務

無需編程的部署

完整的 Web 服務接口

HTTP 上的 SOAP 和 WSDL 生成

REST 型服務接口

HTTP GET/POST 綁定

Web 2.0 功能(JSON,feeds via XSLT,AJax)

將遺留應用程序組件公布為服務的能力

包含 Data Web Services 的 IBM Data Studio 是基於 Eclipse 的,易於集成到其他 Eclipse 解決方案中。

Data Web Services 可以避免編寫大量代碼,從而簡化 Web 服務的開發。Data Studio 工具為 Web 服務提供了向導驅動的開發步驟,另外還提供了一個集成的測試環境。而且,可以將 XSLT 應用於輸入和輸出,以滿足服務格式的要求。WSDL 是在幕後自動生成的,這使用戶可以將其提供給 Web 服務客戶機使用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved