Spring管理Hibernate持久層有如下的優勢:
1.基於依賴注入的SessionFactory管理機制,Spring容器(ApplicationContext)管理SessionFactory,使配置很容易被管理和修改,無須使用Hibernate配置文件,通過依賴注入,應用程序(測試)代碼無需關心SessionFactory(無須手動創建),創建和維護均由Spring容器負責;
2.Spring提供有效簡單安全的Hibernate Session處理,Spring對Session的管理是透明的,無須在代碼中操作Session;
3.統一的事務管理,Hibernate的事務管理會限制Hibernate的表現,Spring的聲明式事務管理粒度是方法級,無論是編程式事務,還是聲明式事務,Spring提供一致的編程模型,無須繁瑣的開始事務,顯式地提交,回滾;
4.異常包裝:Spring能夠包裝Hibernate異常,把它們從持久層的checked異常(傳統的JDBC數據庫訪問異常都是checked異常,需要使用try..catch塊來處理)變爲業務層的runtime異常,不再強制開發者在持久層捕捉異常,持久層的異常被包裝成DataAccessException異常的子類,開發者自己決定在合適的層處理異常,將底層數據庫異常包裝成業務異常。
5.HibernateTemplate:能夠完成大量的Hibernate持久層操作(增刪改查),讓測試程序繼承HibernateTemplate即可調用其中的方法。
Spirng與Hibernate融合中,Spring通過ApplicationContext管理SessionFactory,無須採用hiberbate.hbm.xml配置文件,SessionFactory和數據庫的連接均由Spring配置管理,實際的J2EE應用中會使用數據源(DataSource),數據源採用依賴注入的方式傳遞給Hibernate的SessionFactroy
SessionFactory有ApplicationContext管理,會隨着應用啓動時自動加載,Spring容器管理的任一個bean都可以引用SessionFactory對象,比如DAO,Hibernate的數據庫訪問需要在session的管理下,而SessionFactory是Session的工廠,Spring採用依賴注入爲DAO對象注入SessionFactory的引用,(通過構造注入或者設置注入)。
1.Hibernate的持久層訪問步驟:
(1)創建Configuration實例
(2)創建SessionFactory實例
(3)創建Session實例
(4)打開事務
(5)開始持久化訪問
(6)提交事務
(7)如果遇到異常,回滾事務
(8)關閉Session
2.使用HibernateTemplate
HibernateTemplate提供持久層訪問模板化,使用HibernateTemplate無須實現特定接口,只需要一個SessionFactory的引用,SessionFactory對象(注意引用和對象的關係)通過構造注入或者設置注入的方式傳入。
在Web應用中,通常啓動時自動加載ApplicationContext,SessionFactory和DAO對象都處在Spring容器的管理中,無須在代碼中顯示設置,可以通過配置文件設置SessionFactory和DAO的依賴關係。
在Spring中使用Hibernate Synchronize,運用Hibernate框架
1.創建映射文件,映射文件要放到一個包中(時刻注意Hibernate是以映射爲中心的工作流);
2.右擊映射文件,選擇Hibernate Synchronizer->Synchronize File;
這個操作的結果是生成一系列的Java類,即持久化對象的類,這些類完全符合JavaBean的格式,每一個數據屬性均有get和set方法,還會生成包名.base,包名.dao,包名.dao.iface一系列的包;
3.撰寫DAOImpl實現生成的DAO接口文件,實現對數據庫的操作(包括增刪改查);
4.在客戶端程序中需要聲明HibernateTemplate對象,以實現對數據庫的操作,實例化HibernateTemplate對象時需要提供J2EE應用程序的SessionFactory,通過依賴注入實現(Spring容器中的每一個Bean都可以引用該應用程序管理的SessionFactory)。
HibernateTemplate類的常見方法
delete deleteAll find get save saveOrUpdate update
5.撰寫beans.xml
配置文件需要定義Hibernate的配置,完成hibernate.hbm.xml的功能
(1)定義數據源(通過bean定義),bean對應的類爲org.springframework.jdbc.datasource,需要指定數據庫及用戶名和密碼;
(2)創建sessionFactory(通過bean定義),bean對應的類爲org.springframework.orm.hibernate3.LocalSessionFactoryBean,引用定義數據源的bean,並聲明使用的映射文件;
(3)定義實現DAO接口的類的bean,bean對應的class爲該類的路徑。
6.編寫客戶端測試程序,創建ApplicationContext實例,引用DAOImpl對象,調用定義的方法,實現對數據庫的持久化操作。
注意,在Spring框架下利用Hibernate框架時,不需要指定hibernate.hbm.xml配置文件,因爲在bean.xml中已經對配置做了定義,由Spring容器管理SessionFactory。