1前面已經(jīng)介紹了_第1頁(yè)
1前面已經(jīng)介紹了_第2頁(yè)
1前面已經(jīng)介紹了_第3頁(yè)
1前面已經(jīng)介紹了_第4頁(yè)
1前面已經(jīng)介紹了_第5頁(yè)
已閱讀5頁(yè),還剩79頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、企業(yè) Spring3王健本章簡(jiǎn)介:前面已經(jīng)介紹了Spring的核心技術(shù),如容器BeanFactory,ApplicationContext和AOP。本部分主要介紹Spring對(duì)持久層的支持。使用數(shù)據(jù)庫(kù)定義Spring的數(shù)據(jù)訪問(wèn)支持。配置數(shù)據(jù)庫(kù)資源。使用Spring的Jdbc框架。集成Hibernate。簡(jiǎn)介:在掌握Spring的容器之后,我們要將它應(yīng)用到實(shí)際的工作中去。一個(gè)很好的起點(diǎn)便是:數(shù)據(jù)持久。Spring對(duì)JDBC,Hibernate,iBatis等都支持的很好。Spring的數(shù)據(jù)訪問(wèn)哲學(xué)Spring的目標(biāo)之一,是讓我們遵循面向?qū)ο?OOP)原則中的“面向接口編程”的原則。Spring的

2、數(shù)據(jù)訪問(wèn)也是如此。DAO代表數(shù)據(jù)訪問(wèn)對(duì)像。下圖顯示了設(shè)計(jì)數(shù)據(jù)訪問(wèn)層次的正確設(shè)計(jì)方式:ServiceObjectDaointerfaceDaoimplementation注入實(shí)現(xiàn)DataSource注入Spring的數(shù)據(jù)訪問(wèn)哲學(xué)之異常處理:編寫(xiě)JDBC代碼(不使用Spring)有一個(gè)非常明顯的問(wèn)題,如果不捕獲異常SQLException就幾乎不能對(duì)JDBC進(jìn)行任何操作。但即使捕獲異常很多情況下也不能在catch中將問(wèn)題加以解決,如程序不能連接到數(shù)據(jù)庫(kù)、語(yǔ)法錯(cuò)誤等。所以,SQLException大多數(shù)情況下代表致命錯(cuò)誤。SpringJDBC提供的數(shù)據(jù)訪問(wèn)異常體系能夠解決上述的問(wèn)題。Spring自己

3、提供了多種數(shù)據(jù)訪問(wèn)異常,即異常轉(zhuǎn)換。Spring處理數(shù)據(jù)異常都源于DataAccessException,它是個(gè)不受檢查的異常。有了DataAccessException之后,訪問(wèn)數(shù)據(jù)庫(kù)的代碼將沒(méi)有try.catch代碼塊。為了能夠使用Spring的異常處理,我們必須使用Spring支持的數(shù)據(jù)訪問(wèn)模板之一。Spring的數(shù)據(jù)訪問(wèn)哲學(xué)之模板化處理:Spring將數(shù)據(jù)訪問(wèn)過(guò)程中固定與變化的部分明確的劃分為兩部分:模板。模板管理過(guò)程中固定的部分?;卣{(diào)。處理自定義的數(shù)據(jù)訪問(wèn)代碼。SpringDao模板訪問(wèn)數(shù)據(jù)的過(guò)程:DAO Template1、準(zhǔn)備物資2、開(kāi)始事務(wù)5、提交、回滾事務(wù)6、關(guān)閉資源3、執(zhí)行

4、事務(wù)4、返回?cái)?shù)據(jù)DaoCallBackSpring的數(shù)據(jù)訪問(wèn)哲學(xué)之?dāng)?shù)據(jù)訪問(wèn)模板:Spring提供了多個(gè)模板用于訪問(wèn)不同的持久化平臺(tái)。模板類功能CciTemplateJacCci連接,適用于WebLogic,WebSphere平臺(tái)JdbcTemplateJDBC連接,目前已經(jīng)支持JDK1.5以上版本NameParameterJdbcTemplate支持參數(shù)命名的JDBC連接SimpleJdbcTemplateJDBC連接,支持1.5 從3.1之后,又重新使用JdbcTemplate.HibernateTemplate支持Hibernate2,3,4的會(huì)話,需要spring-orm.jar包。Jp

5、aTempateJava存儲(chǔ)JPA實(shí)體管理SqlMapClientTemplateiBatisSimpleJdbcCall調(diào)用存儲(chǔ)過(guò)程。使用DAO的支持類:前面說(shuō)的是DAO的模板。現(xiàn)在說(shuō)的是DAO模板的支持類。數(shù)據(jù)訪問(wèn)模板,并不是Spring的全部,每個(gè)模板還提供了一些有用的方法,讓我們不必創(chuàng)建明確的回調(diào)實(shí)現(xiàn)。同時(shí),Spring提供了DAO的支持類,用于派生出我們自己的DAO類。如:如果程序DAO繼承了JdbcDaoSupport支持類,那么我們只需要調(diào)用getJdbcTemplate訪問(wèn)就可以獲取一個(gè)JdbcTemplate模板。Spring提供的支持類如下:DAO支持類說(shuō)明CciDaoSu

6、pportJdbcDaoSupportJdbc的支持類。NameParameterJdbcDaoSupportHibernateDaoSupportHibernate的支持類。SqlMapClientDaoSupportiBatis在Spring的配置文件中配置數(shù)據(jù)源:無(wú)論是什么樣的Dao支持,都需要數(shù)據(jù)源的引用.Spring提供了多個(gè)選項(xiàng)用于在Spring中配置數(shù)據(jù)源:由Jdbc驅(qū)動(dòng)程序定義的數(shù)據(jù)源。由JNDI查詢的數(shù)據(jù)源。連接池的數(shù)據(jù)源基于JDBC驅(qū)動(dòng)的數(shù)據(jù)源:Spring能夠配置最簡(jiǎn)單的數(shù)據(jù)源都是基于JDBC的,Spring提供了兩個(gè)這樣的實(shí)現(xiàn):DriverManagerDataSour

7、ce在每個(gè)連接請(qǐng)求時(shí)都會(huì)新建立一個(gè)連接,沒(méi)有連接池的管理。由于每一次都是一個(gè)新的連接,所以速度上有些慢。SimpleDriverDataSource在每個(gè)連接請(qǐng)求時(shí)都返回同一個(gè)連接??梢詫⑺闯墒侵挥幸粋€(gè)連接的連接池。由于只有一個(gè)連接,所以,不太適合多線程的應(yīng)用。強(qiáng)烈建議使用dbcp,c3p0連接池。基于JDBC的數(shù)據(jù)源配置: 使用JdbcTemplate實(shí)現(xiàn)的查詢:ApplicationContext ac = new ClassPathXmlApplicationContext(jdbc.xml);DataSource ds = ac.getBean(DataSource.class);J

8、dbcTemplate jt = new JdbcTemplate(ds);ListMap list = jt.queryForList(select * from student);System.err.println(list);/返回ListList list2 = jt.queryForList(select sname from student,String.class);System.err.println(list2);/只支持一列的查詢List list3 = jt.query(select * from student,new RowMapper()public Stud m

9、apRow(ResultSet rs, int rowNum) throws SQLException Stud stud= new Stud();/使用RowMapper自定義封裝結(jié)果stud.setId(rs.getInt(1);stud.setName(rs.getString(2);return stud;);System.err.println(list3);配置使用連接池:DBCP連接池。C3p0連接池。在Spring中使用JDBC1、使用JDBC模板JdbcTemplateNamedParameterJdbcTemplateSqlFunction數(shù)據(jù)封裝:RowMapper -

10、自動(dòng)遍歷的實(shí)現(xiàn)ResultSetExecutor - 自已經(jīng)遍歷實(shí)現(xiàn)MappingSqlQuery - 內(nèi)部類的實(shí)現(xiàn)2、使用Spring對(duì)JdbcDao的支持類。JdbcDaoSupport Dao的實(shí)現(xiàn)類。1、使用JDBC模板:Spring的JDBC框架能夠承擔(dān)資源管理和異常處理的工作,從而簡(jiǎn)化我們的JDBC代碼。對(duì)于JDBC來(lái)說(shuō),Spring提供了三個(gè)模板類JdbcTemplate : Spring當(dāng)中最基本的JDBC模板,利用JDBC和簡(jiǎn)單的索引參數(shù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)。NamedParameterJdbcTemplate : 能夠在執(zhí)行查詢時(shí)將值綁定到SQL里面命名參數(shù)。而不是使用索引參數(shù)

11、。使用JdbcTemplate的簡(jiǎn)單CRUD:Jt對(duì)像的queryForXxx用于查詢數(shù)據(jù)。Jt對(duì)像的update用于執(zhí)行update,delete,insert語(yǔ)句。JdbcTemplete其他方法1:queryForList(sql,Class elementType),此查詢只可以包含一個(gè)字段如:String sql = “select name from person”;List list = jt.queryForList(sql,String.class);注意上面,并不是封裝成一個(gè)JavaBean對(duì)像。此方法內(nèi)部使用statement做為查詢,如果要想使用preparedstat

12、ement作為查詢,可以傳一個(gè)空的參數(shù)即:queryForList(sql,String.clsss,null);queryForMap必須是唯一的行,如果查詢有多行或是沒(méi)有行則會(huì)拋出一個(gè)異常,這一不同于DBUtils,DBUtils有多行時(shí),只返回第一行。queryForObject,可必須要返回唯一的一行。且必須是一列,如下:String sql = select id from person where id=1;jt.queryForObject(sql,Integer.class);JdbcTemplete其他方法2:query()方法變化多端,容易讓人摸不到頭腦。以下是兩個(gè)經(jīng)常的用

13、法:List list2 = jt.query(sql,new ResultSetExtractorList()它將查詢的結(jié)果集交給回調(diào)函數(shù)ResultSetExtractor的子類加以處理:JdbcTemplete的方法3:如果需要遍歷并封裝數(shù)據(jù),Spring建議使用RowMapping進(jìn)行封裝:JdbcTempate在參數(shù)不固定情況下的查詢:批處理:NamedParameterJdbcTemplate:此類支持命名的參數(shù)。但需要說(shuō)明的是此類不是JdbcTemplate的子類。其他方法與JdbcTemplate一樣,只是參數(shù)類型不同,就不在舉例了。其內(nèi)部通過(guò)MapSqlParameterSo

14、urce加以實(shí)現(xiàn)。配置-注入JdbcTemplate:另一種方式注入DataSource:其他處理類:SqlUpdate用于執(zhí)行insert,update,delete和簡(jiǎn)化操作。BatchSqlUpdate用于執(zhí)行批處理的快速操作。flush用于確定執(zhí)行sql語(yǔ)句。MappingSqlQuery簡(jiǎn)化回調(diào)函數(shù)的查詢。mapRow方法使用Spring對(duì)JDBC Dao的支持類:JdbcDaoSupport在繼承了JdbcDaoSupport支持類后,可以直接使用getXxx方法操作數(shù)據(jù)庫(kù)。當(dāng)然必須要在xml中注入datasource屬性。另有其他類:NamedParameterJdbcDaoSu

15、pportSimpleJdbcDaoSupport事務(wù)管理事務(wù):用戶的一次操作只有一種結(jié)果,成功或失敗。事務(wù)ACID原子性(Atomic)原子性確保在事務(wù)中的所有操作要么都發(fā)生,要么都不發(fā)生。一致性 (Consistent)一旦一個(gè)事務(wù)結(jié)束,不論是否成功,系統(tǒng)所處的狀態(tài)和它的業(yè)務(wù)規(guī)則是一致的。隔離性(Isolated)事務(wù)應(yīng)該允許多用戶操作同一個(gè)數(shù)據(jù),一名用戶的操作不會(huì)和其他用戶的操作相混淆。持久性(Durable)一旦事務(wù)完成,事務(wù)的結(jié)果應(yīng)該持久化。Spring對(duì)事務(wù)管理的支持Spring和EJB一樣,不僅提供對(duì)程序控制事務(wù)管理的支持,而且提供對(duì)聲明式事務(wù)管理的支持。但是Spring的事務(wù)管

16、理功能要超過(guò)EJB的那些。以下是Spring的事務(wù)管理器:管理器類說(shuō)明DataSourceTransactionManager提供對(duì)JDBC,iBatis的支持,DataSourceHibernateTransactionManager在Hibernate的支持,SessionFactorySpring的聲明式事務(wù)Spring提供了三種聲明式事務(wù)的方式。代理事務(wù)。需要使用TransactionProxyFactoryBean來(lái)代理Serivce層的實(shí)例.聲明事務(wù)。需要使用tx命名空間。(首先方式,加強(qiáng)學(xué)習(xí)。)注解驅(qū)動(dòng)的事務(wù)。在Service層添加注解。在開(kāi)始之前先了解一下事務(wù)的參數(shù):Sprin

17、g中,聲明式事務(wù)是通過(guò)事務(wù)參數(shù)來(lái)定義的。并且定義了事務(wù)的幾種傳播行為:共為分7種:Spring在TransactionDefinition接口中規(guī)定了7種類型的事務(wù)傳播行為,它們規(guī)定了事務(wù)方法和事務(wù)方法發(fā)生嵌套調(diào)用時(shí)事務(wù)如何進(jìn)行傳播:事務(wù)傳播行為類型說(shuō)明PROPAGATION_REQUIRED如果當(dāng)前沒(méi)有事務(wù),就新建一個(gè)事務(wù),如果已經(jīng)存在一個(gè)事務(wù)中,加入到這個(gè)事務(wù)中。這是最常見(jiàn)的選擇。PROPAGATION_SUPPORTS支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就以非事務(wù)方式執(zhí)行。PROPAGATION_MANDATORY使用當(dāng)前的事務(wù),如果當(dāng)前沒(méi)有事務(wù),就拋出異常。PROPAGATION_REQU

18、IRES_NEW新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。PROPAGATION_NOT_SUPPORTED以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。PROPAGATION_NEVER以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。PROPAGATION_NESTED如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒(méi)有事務(wù),則執(zhí)行與PROPAGATION_REQUIRED類似的操作。使用TransactionProxyFactoryBean此類被稱為代理事務(wù)Bean.此類是ProxyFactoryBean的一個(gè)特化,它們都是FactoryBean的子類。TransactionP

19、roxyFactoryBean和ProxyFactoryBean一樣,接收一個(gè)target參數(shù),用于指定被代理的Bean.同時(shí)它還接收一個(gè)TransactionManager屬性用于指定事務(wù)的管理者。同時(shí)還接收一個(gè)transactionAttributes屬性,用于指定哪些方法要添加事務(wù)。下頁(yè)是使用此類的一個(gè)實(shí)例。使用TransactionProxyFactoryBean開(kāi)發(fā)步驟:書(shū)寫(xiě)一個(gè)dao類,實(shí)現(xiàn)JdbcDaoSupport.以簡(jiǎn)化開(kāi)發(fā)。書(shū)寫(xiě)一個(gè)service類。并注入dao.在配置文件是配置txManager-DataSourceTransactionManager.在配置文件中配置S

20、ervice.在配置文件中配置TransactionFactoryBean并注入tagert屬性。使用 TransactionProxyFactoryBean代理的事務(wù):需要說(shuō)明的是,someDaojdbc需要開(kāi)發(fā)接口,否則就會(huì)轉(zhuǎn)換不成功:事務(wù)的測(cè)試代碼:Dao的代碼:測(cè)試調(diào)用代碼,注意接口的使用:在Spring中使用tx聲明事務(wù):TransactionProxyFactoryBean的問(wèn)題是會(huì)導(dǎo)致冗長(zhǎng)的配置文件。在Spring中還提供了tx命名空間??梢栽谥新暶魇聞?wù)策略。在使用時(shí),我們?nèi)匀恍枰粋€(gè)事務(wù)管理者DataSourceTransactionManager.根據(jù)慣例,會(huì)自動(dòng)引用一個(gè)id

21、名為transactionManager的Bean.只用于定義通知。它必須要配置共同發(fā)揮做用。命名空間:xmlns:tx= schemaLocation: /spring-tx-3.2.xsd示例:定義對(duì)某些方法添加何種事務(wù)。定義一個(gè)具體的方法。引用的定義特別說(shuō)明:一般情況下,按照接口編程的原則,我們一般將切面都作用在接口上,即:cn.ITx2Service是一個(gè)接口,而不是一個(gè)實(shí)現(xiàn)類。通過(guò)下面的方法定義后,即可以按正常方式配置自己的類,將會(huì)根據(jù)配置的情況自動(dòng)添加事務(wù)。使用tx,AOP配置管理事務(wù):刪除原來(lái)對(duì)TransactionProxyBean的配置,只需要配置一個(gè)攔截點(diǎn)即可。規(guī)范代碼,在

22、Service層管理事務(wù): 用tx,aop管理事務(wù)示例要求:Service層包含Service的實(shí)現(xiàn)類和接口類。Dao層包含Dao的實(shí)現(xiàn)類和接口類。給Service注入Dao的接口。在beans.xml文件中,通過(guò)aop方法切入Service的方法。項(xiàng)目結(jié)構(gòu)如下:Dao的代碼如下:Dao的代碼如下:Spring配置文件如下:定義注解驅(qū)動(dòng)的事務(wù):大大簡(jiǎn)化了Spring聲明式事務(wù)所配置的代碼。但它還可以進(jìn)一步簡(jiǎn)化。除了以外,Spring還提供了元素。元素告訴Spring在類的層面上查找Transactional的bean,并對(duì)其進(jìn)行事務(wù)管理。在Spring的包org.springframework

23、.transaction.annotation中,也只有Transactional這一個(gè)注解。此注解可以用在類上或是方法上。更重要的是,它經(jīng)常在接口上定義。此注解如果做用有類上,則類中所的方法都將擁有事務(wù)。如果類上沒(méi)有添加注解,只給方法上添加了注解,則只有此方法上存在事務(wù)。在Spring中開(kāi)發(fā)基于注解的事務(wù):第一步:書(shū)寫(xiě)配置文件。非常簡(jiǎn)單了已經(jīng)了。但仍然需要聲明TransactionManager.第二步:書(shū)寫(xiě)Service的接口,并在接口上添加注解。附加-了解即可:在Spring中手工編寫(xiě)事務(wù):DataSourceTransactionManager是事務(wù)的管理者,用于維護(hù)一個(gè)DataSou

24、rce,真正執(zhí)行事務(wù)的類是TransactionTemplate,通常稱此類為事務(wù)模板.TransactionTemplate的execute方法用于執(zhí)行帶事務(wù)的SQL處理。同時(shí)TransactionTemplate需要維護(hù)一個(gè)DataSourceTransactionManager的成員變量 。在TransactionTemplate的execute方法中接收一個(gè)TransactionCallback.TransactionCallback可以返回指定的數(shù)據(jù),它的子類TransactionCallbackWithoutResult是沒(méi)有返回值的事務(wù)。首先讓我們看一個(gè)沒(méi)有事務(wù)的代碼:使用同一個(gè)

25、JdbcTemplate在沒(méi)有事務(wù)的情況下執(zhí)行兩個(gè)SQL語(yǔ)句。Spring中編寫(xiě)手工事務(wù):在一個(gè)方法中處理:在以下代碼中,使用trycatch與不使用的效果一樣,因?yàn)镾pring會(huì)自動(dòng)維護(hù)一個(gè)事務(wù)。在Spring編寫(xiě)事務(wù)具有返回值的:使用注解現(xiàn)DI注入:Spring支持使用注解方式組裝所有Bean。Spring的命名空間用于聲明哪些包中的類將被自動(dòng)搜索。Repository(value=“studentDao”)用于在Dao層面的實(shí)現(xiàn)類上聲明注解。Service(value=“studentService”)用于在Service層面的實(shí)現(xiàn)類上聲明注解。Resource(name=“dataSo

26、urce”)用于在setXxx方法或是在私有的成員上設(shè)置引用關(guān)系。通過(guò)注解組組裝Bean:Spring的配置文件如下:只需要在配置文件中添加component-scan即可以將指定包中添加了注解的類自動(dòng)組裝成Bean.在Service層Dao層分別使用注解:Dao層Service層測(cè)試代碼:Spring與Hibernate集成在Spring中集成HibernateSpring支持多種ORM框架,包括Hibernate,myBatis,JPA等。選擇Hibernate的版本。Hibernate版本分為3,4。目前hibernate4與spring3整合還存在非常多的問(wèn)題。大家可以選擇使用spri

27、ng3+hibernate3測(cè)試。Spring的.orm.hibernate3包,支持hibernate3.Spring的.orm.hibernate4包,支持Hibernate4.本列選擇Hibernate4。在純Hibernate項(xiàng)目中,SessionFactory接口獲取Session并與數(shù)據(jù)庫(kù)進(jìn)行會(huì)話。而Spring的HibernateTemplate在Hibernate Session基礎(chǔ)上提供了一個(gè)抽象層。其主要功能是簡(jiǎn)化打開(kāi)和關(guān)閉Hibernate會(huì)話工作,并將Hibernate異常轉(zhuǎn)化為Spring的ORM異常之一。Spring集成Hibernate:引入Hibernate的包

28、。引入c3p0的包引入ehcache的包。由LocalSessionFactoryBean代替SessionFactory。并在此類中加入Hibernate的配置文件。引用DataSource由HibernateTemplate代替JdbcTemplate。引用LocalSessionFactory.Spring集成Hibernate核心配置:配置文件如下:在 Spring配置文件中添加dataSource的配置。配置LocalSessionFactoryBean創(chuàng)建SessionFactory。添加hibernate.cfg.xml文件。在LocalSessionFacotoryBean中添

29、加引用。可選的配置ehcache。項(xiàng)目結(jié)構(gòu):在集成時(shí)一定要仔細(xì),否則將會(huì).你懂得第一步:建議通過(guò)庫(kù)的方式導(dǎo)入各版本的包:第二步:配置Spring的配置文件如下:配置LocalSessionFactoryBean配置HibernateTransactionManager第三步:配置hibernate.cfg.xml文件在hibernate4之后,由于已經(jīng)不再支持HibernateTemplate所以必須要配置SpringSessionContext,以便于在Dao中通過(guò) sessionFacotry().getCurrentSessoin()獲取session。第四步:【可選】如果打開(kāi)了二級(jí)緩存

30、,請(qǐng)配置ehcache.xml 指定ehcache配置文件的位置,可選的配置ehcache的位置。/WEB-INF/conf/ehcache.xml默認(rèn)在classpath:ehcache.xml文件中。第五步:開(kāi)發(fā)hibernate的影射文件*.hbm.xml文件public class Teacher private Integer id;private String name;Getters.and setters第六步:開(kāi)發(fā)Dao/Service/測(cè)試類以下只提供Dao的代碼:hibernate4里面已經(jīng)不建議用hibernateTemplate了 你的sessionFactory配置

31、的是hibernate4這個(gè)包下的 SessionFactory,再與spring整和就用不了 hibernateTemplate了,因?yàn)閔ibernate自身的API已經(jīng)足夠簡(jiǎn)單, 直接用Session就行了第七步:【可選】測(cè)試二級(jí)緩存是否工作兩次調(diào)用同一個(gè)查詢即可:注意對(duì)get/load/save會(huì)自動(dòng)放到二級(jí)緩存。但對(duì)于Criteria/Query必須要調(diào)用setCacheable(true)才可以。完!使用被注解的對(duì)像簡(jiǎn)介Hibernate支持JPA注解和Hibernate專用注解。要使用注解,就必須要將LocalSessionFactoryBean換成AnnotationSessio

32、nFactoryBean.在一個(gè)類上,可以同時(shí)使用JPA的注解和Hibernate的注解。Hibernate的注用于完成JPA注解的不足之處。Hibernate3中使用AnnotationSessionFactoryBean支持注解。Hibernate4中默認(rèn)的.hibernate4.LocalSessionFactory即已經(jīng)支持了注解。使用被注解的對(duì)像配置文件:Spring的配置文件與Hibernate.cfg.xml配置文件共同使用:Spring中的AnnotationLocalSessionFactory類給我們提供了更多的方便,它可以直接操作一個(gè)包,將其中的映射文件或是注解的類直接加

33、載為一個(gè)實(shí)體對(duì)象。同時(shí)仍然可以引用一個(gè)hibernate.cfg.xml文件。被注解的類:調(diào)用測(cè)試代碼和前面的一樣,所以測(cè)試代碼就略了吧!理解Spring對(duì)Hibernate事務(wù)管理的支持Spring和EJB一樣,不僅提供對(duì)程序控制事務(wù)管理的支持,而且提供對(duì)聲明式事務(wù)管理的支持。但是Spring的事務(wù)管理功能要超過(guò)EJB的那些。以下是Spring的事務(wù)管理器:管理器類說(shuō)明DataSourceTransactionManager提供對(duì)JDBC,iBatis的支持,DataSourceHibernateTransactionManager在Hibernate的支持,SessionFactory配置

34、Hibernate事務(wù)配置Hibernate事務(wù)只需要將DataSourceTransactionManager換成HibernateTransactionManager即可。當(dāng)然在配置前必須已經(jīng)配置好了SessionFactory.S2SH整合S2SH整合。CRUD。簡(jiǎn)介:目前三大框架,已是開(kāi)發(fā)的主流。在開(kāi)發(fā)過(guò)程中,發(fā)揮各框架的優(yōu)勢(shì)已經(jīng)成為不二之選。一般情況下:用Struts2作為控制層。頁(yè)面和Action.用Spring做為事務(wù)處理層。一般事務(wù)都作用在Service的接口層。用Hibernate做持久處理層。它們典型的包結(jié)構(gòu)如下:整合中的其他問(wèn)題:使用ehcache設(shè)置Spring Bea

35、n的緩存:第一步:建立一個(gè)公共包。在包中建立兩個(gè)類分另實(shí)現(xiàn)周?chē)ㄖ头祷睾笸ㄖ<矗篹rcept.MethodInterceptororg.springframework.aop.AfterReturningAdvice并在實(shí)現(xiàn)類中添加net.sf.ehcache.Cache成員變量,即注入。第二步:在配置文件中聲明使用ehcache緩存EhCacheManagerFactoryBean和EhCacheFactoryBean。第三步:在配置文件中配置上面的周?chē)ㄖ头祷睾笸ㄖ?,并注入ehcache。第四步:使用aop元素設(shè)置切面??梢栽O(shè)置多個(gè),對(duì)兩個(gè)通知,

36、應(yīng)該設(shè)置攔截不同的方法。第五步:運(yùn)行并測(cè)試即可。注意:需要很多包的支持,請(qǐng)大家仔細(xì)查找??偨Y(jié):Spring對(duì)數(shù)據(jù)支持中的異常轉(zhuǎn)換。Spring的數(shù)據(jù)處理模板: JdbcTemplate.Spring的數(shù)據(jù)支持類:JdbcDaoSupport.在Spring的配置文件中配置數(shù)據(jù)源: DriverManagerDataSource,dbcp,c3p0。Spring的緩存。Spring的通知,AOP.Spring事務(wù)。Spring與其他項(xiàng)目集成。符加:Spring 緩存簡(jiǎn)介:Spring對(duì)各種緩存框架都做了很好的支持。在此我們選擇Ehcache作為Spring首選的緩存框架。Ehcache也廣泛應(yīng)用到其他項(xiàng)目中,如Hibernate和web頁(yè)面緩存。Spring中提供兩個(gè)類實(shí)現(xiàn)ehcache的加載:Org.springframework.cache.ehcache.EhcacheManagerFactoryBean此類負(fù)責(zé)加載ehcache.xml配置文件。Org.springframework.cache.ehcache.EhcacheFactoryBean此類負(fù)責(zé)創(chuàng)建ehcach

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論