O/R mapping 集成
當然你經常需要使用O/R mapping,而不是使用關系數據訪問。你總體的應用程序框架也必須支持它。因而提供了對Hibernate 2.x和JDO的集成支持。它的數據訪問架構使得它能和任何底層的數據訪問技術集成。Spring和Hibernate集成得尤其好。
為什么你要使用Hibernate加Spring,而不是直接使用Hibernate?
Session 管理 Spring提供有效率的,簡單的以并且是安全的處理Hibernate Session。使用Hibernate的相關代碼為了效率和恰當的事務處理一般需要使用相同的Hibernate “Session”對象。Spring讓它容易透明地創建和綁定Session到當前的線程,要么使用聲明式,AOP的method interceptor方法,要么在Java代碼層面使用顯式的,“template”包裝類。因而Spring解決了在Hibernate論壇上經常出現的用法問題。
資源管理 Spring的應用程序context能夠處理Hiberante SessionFactories的位置和配置,JDBC數據源和其他相關資源。這使得這些值易于管理和改變。
集成的事務管理 Spring讓你能夠把你的Hibernate代碼包裝起來,要么使用聲明式,AOP風格的method interceptor,要么在Java代碼層面顯式使用“template”包裝類。在兩種做法中,事務語義都為你處理了,并且在異常時也做好了恰當的事務處理(回滾,等)。如下面討論的,你還獲得了能夠使用和替換不同transaction manager,而不會讓你相關Hibernate代碼受到影響的能力。額外的,JDBC相關的代碼能夠完全事務性的和Hibernate代碼集成。這對于處理沒有在Hibernate實現的功能很有用。
如上描述的異常包裝 Spring能夠包裝Hibernate異常,把它們從私有的,checked異常轉換為一套抽象的運行時異常。這使得你能夠僅僅在恰當的層面處理大部分不可恢復的持久化異常,而不影響樣板catch/throw,和異常聲明。你仍然能夠在任何你需要的地方捕捉和處理異常。記住JDBC異常(包括DB特有的方言)也被轉換到相同的層次中,意味著你能在一致的編程模型中對JDBC執行相同的操作。
為了避免和廠商綁定 Hibernate是強大的,靈活的,開放源代碼并且免費,但是它仍然使用私有的API。給出了一些選擇,使用標準或者抽象API實現主要的程序功能通常是你想要的,當你需要因為功能,性能,或者其他考慮要轉換到使用其他實現時。
讓測試變簡單 Spring的Inversion of Control方法使得改變Hibernate的session factories,數據源,transaction manager的實現和位置很容易,如果需要的話還能改變mapper object的實現。這使得更加容易分離和測試持久化相關的代碼。
posted on 2005-10-26 15:55
Sung 閱讀(210)
評論(0) 編輯 收藏 所屬分類:
Java