?
このドキュメントでは、 php中國(guó)語(yǔ)ネットマニュアル リリース
目錄
SessionFactory
HibernateTemplate
PersistenceManagerFactory
JdoTemplate
和JdoDaoSupport
JdoDialect
SessionFactory
抽象層TopLinkTemplate
and
TopLinkDaoSupport
SqlMapClientTemplate
和 SqlMapClientDaoSupport
JpaTemplate
和 JpaDaoSupport
JpaDialect
Spring Framework在資源管理,DAO實(shí)現(xiàn)支持以及事務(wù)策略等方面提供了與 Hibernate、JDO、Oracle TopLink、iBATIS SQL Mappings 以及 JPA 的集成。 以Hibernate為例,Spring通過(guò)使用許多IoC的便捷特性對(duì)它提供了一流的支持,幫助你處理很多典型的Hibernate整合的問(wèn)題。 所有用于支持O/R(對(duì)象關(guān)系)映射的包,都遵循Spring通用的事務(wù)和DAO異常體系。通常來(lái)說(shuō)有兩種不同的整合風(fēng)格:你可以使用Spring提供的DAO模板,或者直接使用Hibernate/JDO/TopLink等工具的原生API編寫(xiě)DAO。 無(wú)論采取哪種風(fēng)格,這些DAO都可以通過(guò)IoC進(jìn)行配置,并參與到Spring的資源和事務(wù)管理中去。
當(dāng)用戶選擇O/R Mapping來(lái)創(chuàng)建數(shù)據(jù)訪問(wèn)的應(yīng)用時(shí),Spring提供了強(qiáng)大的支持。 首先應(yīng)該了解的是,一旦使用了Spring對(duì)O/R Mapping的支持,你不需要親自做所有的事情。 無(wú)論如何,在決定花費(fèi)力氣并冒著風(fēng)險(xiǎn)去構(gòu)造類似的內(nèi)部底層架構(gòu)之前,我們都建議你考慮和使用Spring的解決方案。 無(wú)論您采用何種技術(shù),Spring對(duì)大部分O/R Mapping的支持都可以以library的形式被調(diào)用,因?yàn)樗械膬?nèi)容都被設(shè)計(jì)成一組可重用的JavaBeans。 在Spring的IoC容器中使用這些類,更是有著配置和部署簡(jiǎn)單的好處。 因而,在這一章中你看到的大多數(shù)例子都是在Spring容器中進(jìn)行的配置。
使用Spring Framework構(gòu)建你的O/R Mapping DAO的好處包括:
便于測(cè)試。 Spring的IoC方式使得替換不同的實(shí)現(xiàn)和配置變得非常簡(jiǎn)單,
這些內(nèi)容包括:Hibernate SessionFactory
實(shí)例的位置,JDBC DataSource
實(shí)例,事務(wù)管理器以及映射對(duì)象的實(shí)現(xiàn)(如果需要)等。這樣也就很容易隔離并測(cè)試持久化相關(guān)的代碼的各個(gè)部分。
通用數(shù)據(jù)訪問(wèn)異常封裝。 Spring能夠封裝你所選擇的O/R Mapping工具所拋出的異常, 將它們從專有的(潛在的checked)異常轉(zhuǎn)化為一組抽象的runtime DataAccessException體系。 這可以使你僅需要在恰當(dāng)?shù)膽?yīng)用程序?qū)哟稳ヌ幚泶蟛糠植豢苫謴?fù)的持久層異常,從而避免了很多令人討厭的catch/throw以及異常聲明。 當(dāng)然,你還是可以在你需要的地方捕捉和處理異常?;叵胍幌翵DBC異常(包括與DB相關(guān)的Dialect)被轉(zhuǎn)變?yōu)橥瑯拥漠惓sw系,這就意味著你可以在一致的編程模型中處理JDBC操作。
通用的資源管理。 Spring的application context能夠處理諸如Hibernate的 SessionFactory
實(shí)例,
JDBC的 DataSource
實(shí)例,iBATIS的SQL Maps配置對(duì)象以及其他相關(guān)資源的定位和配置。
這樣,這些配置的值很容易被管理和修改。Spring提供了簡(jiǎn)單、高效、安全的對(duì)持久層資源的處理。
以Hibernate為例,通常在使用Hibernate時(shí),需要使用同一個(gè)Hibernate Session
實(shí)例以確保高效和恰當(dāng)?shù)厥聞?wù)處理。
Spring讓我們能夠很容易透明地創(chuàng)建并綁定一個(gè) Session
到當(dāng)前線程。
你可以使用以下兩種辦法之一:通過(guò)使用一個(gè)外部的template包裝類在Java代碼層次實(shí)現(xiàn),
或者通過(guò)Hibernate的 SessionFactory
暴露當(dāng)前 Session
對(duì)象(對(duì)于那些建立在Hibernate原生的API上的DAO)。
這樣,對(duì)于任何的事務(wù)環(huán)境(本地事務(wù)或者JTA),Spring解決了許多在典型Hibernate使用中不斷出現(xiàn)的這樣那樣的問(wèn)題。
完整的事務(wù)管理。 Spring允許你封裝你的O/R Mapping代碼, 這可以通過(guò)聲明式的AOP方法攔截器或者在Java代碼級(jí)別上使用一個(gè)外部的template包裝類。 無(wú)論使用哪一種方式,事務(wù)控制都會(huì)幫助你做相關(guān)處理,例如一旦有異常發(fā)生時(shí)的事務(wù)操作(rollback等)。 正如我們下面要討論的一樣,你能夠使用和替換各種事務(wù)管理器,卻不會(huì)使你的Hibernate/JDO相關(guān)的代碼受到影響。 例如,不管采用本地事務(wù)還是JTA,完整的Service層的代碼(如聲明式事務(wù)管理)在這種場(chǎng)景下都是相同的。 作為一個(gè)附加的功能,JDBC相關(guān)的代碼能夠在事務(wù)級(jí)別上與你所使用的O/R映射代碼無(wú)縫整合。 這一功能對(duì)于那些諸如批量處理、BLOB的操作等并不適合采用O/R Mapping操作的,但是需要與ORM操作一起參與相同的事務(wù)來(lái)說(shuō)是相當(dāng)有用的。
在Spring發(fā)布包中的PetClinic提供了各種可選擇的DAO實(shí)現(xiàn)和application context對(duì)JDBC、Hibernate、Oracle TopLink和JPA的配置。 因而PetClinic能夠作為一個(gè)Spring的web應(yīng)用示例程序來(lái)描述Hibernate、TopLink和JPA的使用方法的。它同時(shí)涵蓋了聲明式事務(wù)中不同事務(wù)策略的配置。
JPetStore示例主要舉例說(shuō)明了iBATIS SQL Maps在Spring環(huán)境中的使用。它同時(shí)包含了兩套不同的Web層選擇,一套基于Spring Web MVC,而另外一套則基于Struts。
除了Spring自身提供的示例之外,有很多其他的基于Spring的O/R Mapping的示例,他們由各自的供應(yīng)商提供。 例如:JDO的JPOX實(shí)現(xiàn)(http://www.jpox.org/)以及Kodo(http://www.bea.com/kodo)。