ORM 與 Spring 簡介

Spring Framework 支援與 Java Persistence API (JPA) 整合,並支援原生 Hibernate,用於資源管理、資料存取物件 (DAO) 實作和交易策略。例如,對於 Hibernate,透過幾個方便的 IoC 功能提供一流的支援,解決了許多典型的 Hibernate 整合問題。您可以透過相依性注入設定 OR (物件關聯) 對應工具的所有支援功能。它們可以參與 Spring 的資源和交易管理,並且符合 Spring 的通用交易和 DAO 例外階層。建議的整合風格是針對純 Hibernate 或 JPA API 編寫 DAO。

當您建立資料存取應用程式時,Spring 為您選擇的 ORM 層新增了顯著的增強功能。您可以盡可能利用整合支援,並且應該將此整合工作與內部建置類似基礎架構的成本和風險進行比較。您可以像使用函式庫一樣使用大部分 ORM 支援,而與技術無關,因為所有內容都設計為一組可重複使用的 JavaBean。Spring IoC 容器中的 ORM 有助於設定和部署。因此,本節中的大多數範例都顯示 Spring 容器內部的設定。

使用 Spring Framework 建立 ORM DAO 的優點包括:

  • 更輕鬆的測試。 Spring 的 IoC 方法可以輕鬆交換 Hibernate SessionFactory 實例、JDBC DataSource 實例、交易管理器和對應物件實作 (如果需要) 的實作和設定位置。這反過來使得隔離測試每個與持久性相關的程式碼片段變得更加容易。

  • 常見的資料存取例外。 Spring 可以封裝來自 ORM 工具的例外,將它們從專有的 (可能已檢查的) 例外轉換為通用的執行階段 DataAccessException 階層。此功能讓您可以在適當的層級處理大多數持久性例外 (這些例外是不可回復的),而無需煩人的樣板程式碼 catch、throws 和例外宣告。您仍然可以根據需要捕獲和處理例外。請記住,JDBC 例外 (包括資料庫特定的方言) 也會轉換為相同的階層,這表示您可以在一致的程式設計模型中使用 JDBC 執行某些操作。

  • 一般資源管理。 Spring 應用程式 Context 可以處理 Hibernate SessionFactory 實例、JPA EntityManagerFactory 實例、JDBC DataSource 實例和其他相關資源的位置和設定。這使得這些值易於管理和變更。Spring 提供高效、輕鬆且安全的持久性資源處理。例如,使用 Hibernate 的相關程式碼通常需要使用相同的 Hibernate Session,以確保效率和正確的交易處理。Spring 透過 Hibernate SessionFactory 公開目前的 Session,使其易於建立 Session 並透明地繫結到目前的執行緒。因此,對於任何本機或 JTA 交易環境,Spring 解決了典型 Hibernate 使用的許多長期問題。

  • 整合的交易管理。 您可以使用宣告式、面向切面程式設計 (AOP) 樣式方法攔截器來封裝您的 ORM 程式碼,可以透過 @Transactional 註解或在 XML 設定檔中明確設定交易 AOP 建議。在這兩種情況下,都會為您處理交易語意和例外處理 (回滾等等)。如資源和交易管理中所述,您也可以交換各種交易管理器,而不會影響您的 ORM 相關程式碼。例如,您可以在本機交易和 JTA 之間交換,這兩種情況都提供相同的完整服務 (例如宣告式交易)。此外,JDBC 相關程式碼可以與您用於執行 ORM 的程式碼完全交易式整合。這對於不適合 ORM 的資料存取 (例如批次處理和 BLOB 串流) 但仍然需要與 ORM 操作共用通用交易的情況非常有用。

如需更全面的 ORM 支援,包括對 MongoDB 等替代資料庫技術的支援,您可能需要查看 Spring Data 專案套件。如果您是 JPA 使用者,則 開始使用 JPA 存取資料 指南 (來自 spring.io) 提供了很好的入門介紹。