什麼是持久化和對象關係映射ORM技術

來源:互聯網
上載者:User

2.什麼是持久化? 為什麼要持久化? 1.什麼是持久化?
本人找了好多文章都沒有找到滿意的答案,最後是從孫衛琴寫的《精通Hibernate:Java對象持久化技術詳解》中,看到如下的解釋,感覺還是比較完整的。摘抄如下:
狹義的理解: “持久化”僅僅指把域對象永久儲存到資料庫中;廣義的理解,“持久化”包括和資料庫相關的各種操作(持久化就是將有用的資料以某種技術儲存起來,將來可以再次取出來應用,資料庫技術,將記憶體資料一檔案的形式儲存在永久介質中(磁碟等)都是持久化的例子.)。
●     儲存:把域對象永久儲存到資料庫。
●     更新:更新資料庫中域對象的狀態。
●     刪除:從資料庫中刪除一個域對象。
●     載入:根據特定的OID,把一個域對象從資料庫載入到記憶體。
●     查詢:根據特定的查詢條件,把符合查詢條件的一個或多個域對象從資料庫載入內在存中。 2.為什麼要持久化?
持久化技術封裝了資料訪問細節,為大部分商務邏輯提供物件導向的API。
● 通過持久化技術可以減少訪問資料庫資料次數,增加應用程式執行速度;
● 代碼重用性高,能夠完成大部分資料庫操作;
● 鬆散耦合,使持久化不依賴於底層資料庫和上層商務邏輯實現,更換資料庫時只需修改設定檔而不用修改代碼。

學習筆記之什麼是持久化和對象關係映射ORM技術
by Naven at 2005-09-19

何謂“持久化”
持久(Persistence),即把資料(如記憶體中的對象)儲存到可永久儲存的存放裝置中(如磁碟)。持久化的主要應用是將記憶體中的資料存放區在關係型的資料庫中,當然也可以儲存在磁碟檔案中、XML資料檔案中等等。
何謂“持久層”
持久層(Persistence Layer),即專註於實現資料持久化應用領域的某個特定系統的一個邏輯層面,將資料使用者和資料實體相關聯。
何謂“對象資料對應(ORM)”
ORM-Object/Relational Mapper,即“對象-關係型資料對應組件”。對於O/R,即 Object(對象)和 Relational(關係型資料),表示必須同時使用物件導向和關係型資料進行開發。
備忘:建模領域中的 ORM 為 Object/Role Modeling(對象角色建模)。另外這裡是“O/R Mapper”而非“O/R Mapping”。相對來講,O/R Mapping 描述的是一種設計思想或者實現機制,而 O/R Mapper指以O/R原理設計的持久化架構(Framework),包括 O/R機制還有 SQL自產生,交易處理,Cache管理等。

除了 ORM 技術,還有以下幾種持久化技術
主動域對象模式
它是在實現中封裝了關係資料模型和資料訪問細節的一種形式。在 J2EE 架構中,EJB 組件分為會話 EJB 和實體 EJB。會話 EJB 通常實現商務邏輯,而實體 EJB 表示業務實體。實體 EJB 又分為兩種:由 EJB 本身管理持久化,即 BMP(Bean-Managed Persistence);有 EJB 容器管理持久化,即 CMP(Container-Managed Persistence)。BM P就是主動域對象模式的一個例子,BMP 表示由實體 EJB 自身管理資料訪問細節。
主動域對象本身位於商務邏輯層,因此採用主動域對象模式時,整個應用仍然是三層應用結構,並沒有從商務邏輯層分離出獨立的持久化層。
JDO 模式
Java Data Objects(JDO)是 SUN 公司制定的描述對象持久化語義的標準API。嚴格的說,JDO 並不是對象-關係映射介面,因為它支援把對象持久化到任意一種儲存系統中,包括 關聯式資料庫、物件導向的資料庫、基於 XML 的資料庫,以及其他專有儲存系統。由於關聯式資料庫是目前最流行的儲存系統,許多 JDO 的實現都包含了對象-關係映射服務。
CMP 模式
在 J2EE 架構中,CMP(Container-Managed Persistence)表示由 EJB 容器來管理實體 EJB 的持久化,EJB 容器封裝了對象-關係的映射及資料訪問細節。CMP 和 ORM 的相似之處在於,兩者都提供對象-關係映射服務,都把對象持久化的任務從商務邏輯中分離出來。區別在於 CMP 負責持久化實體 EJB 組件,而 ORM 負責持久化 POJO,它是普通的基於 Java Bean 形式的實體域對象。
一般把基於 Java Bean 形式的實體域對象稱為 POJO(Plain Old Java Object),意為又普通又古老的 Java 對象的意思。隨著各種 ORM 映射工具的日趨成熟和流行,POJO有重現光彩,它和基於 CMP 的實體 EJB 相比,即簡單又具有很高的可移植性,因此聯合使用 ORM 映射工具和 POJO,已經成為一種越來越受歡迎的且用來取代 CMP 的持久化方案。POJO 的缺點就是無法做遠程調用,不支援分散式運算。

為什麼要做持久化和ORM設計
在目前的公司專屬應用程式系統設計中,MVC,即 Model(模型)- View(視圖)- Control(控制)為主要的系統架構模式。MVC 中的 Model 包含了複雜的商務邏輯和資料邏輯,以及資料存取機制(如 JDBC的串連、SQL產生和Statement建立、還有ResultSet結果集的讀取等)等。將這些複雜的商務邏輯和資料邏輯分離,以將系統的緊耦合關係轉化為松耦合關係(即解耦合),是降低系統耦合度迫切要做的,也是持久化要做的工作。MVC 模式實現了架構上將表現層(即View)和資料處理層(即Model)分離的解耦合,而持久化的設計則實現了資料處理層內部的商務邏輯和資料邏輯分離的解耦合。而 ORM 作為持久化設計中的最重要也最複雜的技術,也是目前業界熱點技術。
簡單來說,按通常的系統設計,使用 JDBC 操作資料庫,業務處理邏輯和資料存取邏輯是混雜在一起的。
一般基本都是如下幾個步驟:
1、建立資料庫連接,獲得 Connection 對象。
2、根據使用者的輸入組裝查詢 SQL 陳述式。
3、根據 SQL 陳述式建立 Statement 對象 或者 PreparedStatement 對象。
4、用 Connection 對象執行 SQL語句,獲得結果集 ResultSet 對象。
5、然後一條一條讀取結果集 ResultSet 對象中的資料。
6、根據讀取到的資料,按特定的商務邏輯進行計算。
7、根據計算得到的結果再組裝更新 SQL 陳述式。
8、再使用 Connection 對象執行更新 SQL 陳述式,以更新資料庫中的資料。
7、最後依次關閉各個 Statement 對象和 Connection 對象。
由上可看出代碼邏輯非常複雜,這還不包括某條語句執行失敗的處理邏輯。其中的業務處理邏輯和資料存取邏輯完全混雜在一塊。而一個完整的系統要包含成千上萬個這樣重複的而又混雜的處理過程,假如要對其中某些商務邏輯或者一些相關聯的商務程序做修改,要改動的代碼量將不可想象。另一方面,假如要換資料庫產品或者運行環境也可能是個不可能完成的任務。而使用者的運行環境和要求卻千差萬別,我們不可能為每一個使用者每一種運行環境設計一套一樣的系統。
所以就要將一樣的處理代碼即商務邏輯和可能不一樣的處理即資料存取邏輯分離開來,另一方面,關係型資料庫中的資料基本都是以一行行的資料進行存取的,而程式運行卻是一個個對象進行處理,而目前大部分資料庫驅動技術(如ADO.NET、JDBC、ODBC等等)均是以行集的結果集一條條進行處理的。所以為解決這一困難,就出現 ORM 這一個對象和資料之間映射技術。
舉例來說,比如要完成一個購物打折促銷的程式,用 ORM 思想將如下實現(引自《深入淺出Hibernate》):
商務邏輯如下:
public Double calcAmount(String customerid, double amount)
{
    // 根據客戶ID獲得客戶記錄
    Customer customer = CustomerManager.getCustomer(custmerid);
    // 根據客戶等級獲得打折規則
    Promotion promotion = PromotionManager.getPromotion(customer.getLevel());
    // 累積客戶總消費額,並儲存累計結果
    customer.setSumAmount(customer.getSumAmount().add(amount);
    CustomerManager.save(customer);
    // 返回打折後的金額
    return amount.multiply(protomtion.getRatio());
}
這樣代碼就非常清晰了,而且與資料存取邏輯完全分離。設計商務邏輯代碼的時候完全不需要考慮資料庫JDBC的那些千篇一律的操作,而將它交給 CustomerManager 和 PromotionManager 兩個類去完成。這就是一個簡單的 ORM 設計,實際的 ORM 實現架構比這個要複雜的多。

目前有哪些流行的 ORM 產品
目前眾多廠商和開源社區都提供了持久層架構的實現,常見的有
Apache OJB ( http://db.apache.org/ojb/ )
Cayenne ( http://objectstyle.org/cayenne/ )
Jaxor ( http://jaxor.sourceforge.net )
Hibernate ( http://www.hibernate.org )
iBatis ( http://www.ibatis.com )
jRelationalFramework ( http://ijf.sourceforge.net )
mirage ( http://itor.cq2.org/en/oss/mirage/toon )
SMYLE ( http://www.drjava.de/smyle )
TopLink ( http://otn.oracle.com/products/ias/toplink/index.html )
其中 TopLink 是 Oracle 的商業產品,其他均為開源項目。
其中 Hibernate 的輕量級 ORM 模型逐步確立了在 Java ORM 架構中領導地位,甚至取代複雜而又繁瑣的 EJB 模型而成為事實上的 Java ORM 工業標準。而且其中的許多設計均被 J2EE 標準組織吸納而成為最新 EJB 3.0 規範的標準,這也是開源項目影響工業領域標準的有力見證。

參考文獻:1、《深入淺出Hibernate》
         2、《精通Hibernate:Java對象持久化技術詳解》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.