Spring ORM 簡介
Spring 框架支援與 Java Persistence API (JPA) 整合,並支援原生的 Hibernate 進行資源管理、資料訪問物件 (DAO) 實現和事務策略。例如,對於 Hibernate,通過幾個方便的 IoC 特性提供了一流的支援,解決了許多典型的 Hibernate 整合問題。你可以透過依賴注入配置所有支援的物件關係 (OR) 對映工具的特性。它們可以參與 Spring 的資源和事務管理,並且符合 Spring 通用的事務和 DAO 異常層次結構。推薦的整合方式是針對純 Hibernate 或 JPA API 編寫 DAO。
當您建立資料訪問應用程式時,Spring 為您選擇的 ORM 層增加了顯著的增強功能。您可以根據需要利用盡可能多的整合支援,並且應該將這種整合工作與內部構建類似基礎設施的成本和風險進行比較。您可以將大部分 ORM 支援作為庫使用,無論技術如何,因為所有內容都設計為一組可重用的 JavaBeans。Spring IoC 容器中的 ORM 有助於配置和部署。因此,本節中的大多數示例都展示了 Spring 容器內的配置。
使用 Spring Framework 建立 ORM DAO 的好處包括:
-
更簡單的測試。Spring 的 IoC 方法使得交換 Hibernate
SessionFactory例項、JDBCDataSource例項、事務管理器和對映物件實現(如果需要)的實現和配置位置變得容易。這反過來又使得單獨測試每個與永續性相關的程式碼片段變得容易得多。 -
通用資料訪問異常。Spring 可以封裝來自 ORM 工具的異常,將它們從專有(可能是受檢)異常轉換為通用的執行時
DataAccessException層次結構。此功能讓您可以在適當的層中處理大多數永續性異常(這些異常是不可恢復的),而無需煩人的樣板捕獲、丟擲和異常宣告。您仍然可以根據需要捕獲和處理異常。請記住,JDBC 異常(包括特定於資料庫的方言)也會轉換為相同的層次結構,這意味著您可以在一致的程式設計模型中執行一些 JDBC 操作。 -
通用資源管理。Spring 應用程式上下文可以處理 Hibernate
SessionFactory例項、JPAEntityManagerFactory例項、JDBCDataSource例項和其他相關資源的位置和配置。這使得這些值易於管理和更改。Spring 提供高效、簡便和安全的持久化資源處理。例如,使用 Hibernate 的相關程式碼通常需要使用相同的 HibernateSession來確保效率和正確的事務處理。Spring 透過 HibernateSessionFactory公開當前Session,使其能夠輕鬆地透明地建立Session並將其繫結到當前執行緒。因此,Spring 解決了典型 Hibernate 使用中的許多長期存在的問題,適用於任何本地或 JTA 事務環境。 -
整合事務管理。您可以透過
@Transactional註解或在 XML 配置檔案中顯式配置事務 AOP 建議,將 ORM 程式碼包裝在宣告式、面向切面程式設計 (AOP) 風格的方法攔截器中。在這兩種情況下,事務語義和異常處理(回滾等)都由您處理。如資源和事務管理中所述,您還可以交換各種事務管理器,而不會影響您的 ORM 相關程式碼。例如,您可以在本地事務和 JTA 之間進行切換,並且在這兩種情況下都提供相同的完整服務(例如宣告式事務)。此外,JDBC 相關程式碼可以與您用於 ORM 的程式碼完全整合到事務中。這對於不適合 ORM 的資料訪問(例如批處理和 BLOB 流)但仍需要與 ORM 操作共享通用事務的情況非常有用。
| 為了獲得更全面的 ORM 支援,包括對 MongoDB 等替代資料庫技術的支援,您可能需要檢視 Spring Data 專案套件。如果您是 JPA 使用者,spring.io 上的 Getting Started Accessing Data with JPA 指南提供了一個很好的入門介紹。 |