實現Castor資料繫結,第4部分:把Java對象綁定到SQL資料

來源:互聯網
上載者:User

本文配套源碼

對於多數開發人員 — 尤其是各種Java版本的使用者 — 資料繫結已經和閉包、單例(singletons)、Ajax一樣變為常用詞彙表中的一部分了。而且和其他術語一樣,資料繫結也常常被錯誤的定義。

特別是大部分程式員在聽到資料繫結 的時候,實際上想的是XML資料繫結。加上這個小小的單詞XML,造成大多數程式員忽略了相當多的功能和靈活性,尤其是如果使用 Castor API的話。這是因為對於Castor而言,XML資料繫結僅僅是其中的一部分。除了綁定到XML文檔之外,Castor還提供了將Java資料繫結到SQL資料庫的能力。這就是所謂的SQL資料繫結。

定義SQL資料繫結

SQL資料繫結 也許是一個新的術語,概念其實非常簡單。實際上,最好從一個更熟悉的術語 XML 資料繫結 出發來考察。XML 資料繫結就是在 XML 文檔資料 — 通常儲存在元素和屬性中 — 和 Java 物件模型的屬性之間建立映射的過程。可以通過編組程式和解組程式在兩者之間移動資料。編組程式從 Java 物件模型獲得資料存放區到 XML 文檔中,解組程式從 XML 文檔擷取資料存入Java物件模型的屬性中。

在這個基礎上,我們說 SQL 資料繫結是在 SQL 資料庫資料 — 儲存在模式、表、列等中 — 和 Java 對象之間建立映射的過程就毫不奇怪了。編組和解組的過程一樣,只不過轉換是在 Java 對象和 SQL 而不是 XML 之間進行的。實際上,多數資料繫結文章中如果將 XML 替換為 SQL,元素資料 更改為表記錄,討論的內容就變成了 SQL 資料繫結了。

SQL 資料繫結的意義

Java 技術剛誕生的時候基本上是一種玩具語言,很大程度上是因為它的 API 非常簡單,而且主要關注於映像(還記得 AWT 嗎?)。Java 技術走向成熟的標誌是 Java 資料庫連接(JDBC),能夠持久到 SQL 資料庫。JDBC 過去(現在也是)惟一的問題是用起來很笨重。並不是說多複雜,而是對於大多數程式而言增加了太多的額外工作。

使用 Castor 和 SQL 資料繫結可以避免大部分複雜性。更妙的是,這種 API 對於 XML 和 SQL 上下文功能基本相同。而且使用資料繫結,應用程式需要關心的細節也少了。處理 JDBC ResultSet 和行數不再是您的代碼的問題了,幾次簡單的編組解組調用就能處理 Java 對象和 SQL 資料庫之間的轉換。

關於 SQL 資料繫結可能最有意思的是它沒有受到過多 的壓力和關注。特別是考慮到一大批程式員對 XML 心存芥蒂,說它冗長笨拙,或者他們更願意使用二進位序列化。但是這些人對 SQL 雙手歡迎。事實上,如果發現有一大批程式員甚至真正的程式員也不認為 SQL 是一種合法的資料存放區和持久技術,您可能會非常吃驚(看看你周圍有多少人認為關聯式資料庫臃腫笨拙、誇大其詞或者已經落伍)。

既然如此,SQL 資料繫結和它的 XML 兄弟相比無疑更有意義。公司專屬應用程式程式中必然需要持久(或儲存)資料,而編寫資料訪問和檢索代碼是痛苦的。SQL 資料繫結把一種熟悉的 API(假設您已經閱讀過本系列前面的文章)用於 SQL 資料存放區。幾行命令就能把資料寫入表(或者多個表)或者讀出來。

仍然是映射

SQL 資料繫結特別重要的一點是,能夠建立 Java 對象到 SQL 資料模式的映射而不需要綁定 Java 或者 SQL 名稱。和 XML 相比,關聯式資料庫的結構通常和 Java 對象的結構相距甚遠。表是資料的集合,對象通常代表一部分(可能是一行)資料。對象之間的關係必須跟蹤到其他對象,就像表之間的關係要跟蹤到其他表。但是 Java 物件模型中沒有一對多的串連表,當然也沒有多對多串連。

即便是中等複雜程度的關聯式資料庫,設計的東西也和物件模型不同。SQL 和 Java 對象之間的映射,大量的工作就是定義對象和表之間的映射。雖然映射可能很複雜,本文中將使用幾個簡單的映射說明 SQL 資料繫結中映射的基本原理。

這就是 JDO,對嗎?

是。但也不全對。有幾分對。這裡有點讓人費解。

Sun 有一個規範叫 Java 資料對象(Java Data Objects,JDO)。Java Specification Request (JSR) 12(JDO 1.0)和 JSR 243(JDO 2.0)定義了一種非常具體的 SQL 資料繫結方法(雖然從未明確地稱為 “SQL 資料繫結”)。如果讀過 JDO 然後再讀本文開始的介紹部分,就會發現是一件事。但是,Castor 的 JDO(不錯,Castor 也叫 JDO,事情更加混亂)不 同於 Sun 的 JDO,甚至沒有任何關係,只不過兩者的基本目標相同而已。

鑒於可能造成很大混淆,再強調一次:如果使用 Castor 的 JDO,那麼它不是 Sun 的標準 API。但問題並不像看起來這麼糟糕或者簡單明了。實際上,Castor 的開發人員正努力將其 API 的很多特性納入 Sun 資料繫結和 JDO API。因此,雖然 Castor 現在還不是標準 API,但很多特性 — 包括 API 自身 — 可能有一天會成為標準化的 JDO API。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.