Java EE輕量級框架應用實戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第9章 Spring的數(shù)據(jù)庫開發(fā)及事務管理_第1頁
Java EE輕量級框架應用實戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第9章 Spring的數(shù)據(jù)庫開發(fā)及事務管理_第2頁
Java EE輕量級框架應用實戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第9章 Spring的數(shù)據(jù)庫開發(fā)及事務管理_第3頁
Java EE輕量級框架應用實戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第9章 Spring的數(shù)據(jù)庫開發(fā)及事務管理_第4頁
Java EE輕量級框架應用實戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第9章 Spring的數(shù)據(jù)庫開發(fā)及事務管理_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

SpringJDBCSpringJdbcTemplate類的常用方法Spring事務管理概述聲明式事務管理第9章

Spring的數(shù)據(jù)庫開發(fā)及事務管理2024/1/29學習目標/Target2了解JDBC模塊的作用

熟悉SpringJDBC的配置

掌握JdbcTemplate類常用方法的使用

熟悉Spring事務管理的3個核心接口

了解Spring事務管理的兩種方式掌握基于XML和基于注解的聲明式事務的使用章節(jié)概述/Summary3數(shù)據(jù)庫用于處理持久化業(yè)務產(chǎn)生的數(shù)據(jù),應用程序在運行過程中經(jīng)常要操作數(shù)據(jù)庫。一般情況下,數(shù)據(jù)庫的操作由持久層來實現(xiàn)。作為擴展性較強的一站式開發(fā)框架,Spring也提供了持久層SpringJDBC功能,SpringJDBC可以管理數(shù)據(jù)庫連接資源,簡化傳統(tǒng)JDBC的操作,進而提升程序數(shù)據(jù)庫操作的效率。本章將對SpringJDBC相關知識進行詳細講解。

目錄/CONTENTSSpringJDBC聲明式事務管理Spring事務管理概述SpringJdbcTemplate類的常用方法41432SpringJDBC01第9章Spring的數(shù)據(jù)庫開發(fā)及事務管理SpringJDBC模塊有什么作用?SpringJDBC6

Spring的JDBC模塊負責數(shù)據(jù)庫資源管理和錯誤處理,大大簡化了開發(fā)人員對數(shù)據(jù)庫的操作,使得開發(fā)人員可以從繁瑣的數(shù)據(jù)庫操作中解脫出來,從而將更多的精力投入到編寫業(yè)務邏輯當中。SpringJdbcTemplate的解析7

針對數(shù)據(jù)庫的操作,Spring框架提供了JdbcTemplate類,該類是Spring框架數(shù)據(jù)抽象層的基礎??梢哉f,JdbcTemplate類是SpringJDBC的核心類。

接口JdbcOperations抽象類JdbcAccessor核心類JdbcTemplateextendsimplementsJdbcTemplate類的繼承結構具體如下圖所示:SpringJdbcTemplate的解析8

從JdbcTemplate的繼承關系圖可以看出,JdbcTemplate類的直接父類是JdbcAccessor,該類為子類提供了一些訪問數(shù)據(jù)庫時使用的公共屬性。

其主要功能是獲取數(shù)據(jù)庫連接,還可以引入對數(shù)據(jù)庫連接的緩沖池和分布式事務的支持,它可以作為訪問數(shù)據(jù)庫資源的標準接口。DataSource:

該接口負責對SQLException進行轉譯工作。通過必要的設置獲取SQLExceptionTranslator中的方法,可以使JdbcTemplate在需要處理SQLException時,委托SQLExceptionTranslator的實現(xiàn)類來完成相關的轉譯工作。SQLExceptionTranslator:

而JdbcOperations接口定義了在JdbcTemplate類中可以使用的操作集合,包括添加、修改、查詢和刪除等操作。SpringJDBC的配置9

SpringJDBC模塊主要由4個包組成,分別是core(核心包)、dataSource(數(shù)據(jù)源包)、object(對象包)和support(支持包)。說明說明core包含JDBC的核心功能,即JdbcTemplate類、SimpleJdbclnsert類、SimpleJdbcCall類、NamedParameterJdbcTemplate類dataSource訪問數(shù)據(jù)源的實用工具類,它有多種數(shù)據(jù)源的實現(xiàn),可以在JavaEE容器外部測試JDBC代碼object以面向對象的方式訪問數(shù)據(jù)庫,它允許執(zhí)行查詢并將返回結果作為業(yè)務對象,可以在數(shù)據(jù)表的列和業(yè)務對象的屬性之間映射查詢結果support包含core包和object包的支持類,如提供異常轉換功能的SQLException類SpringJDBC的配置10

從上表可以看出,Spring對數(shù)據(jù)庫的操作都封裝在了這幾個包中,而想要使用SpringJDBC,就需要對其進行配置。<beanid="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><propertyname="driverClassName"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/spring"/><propertyname="username"value="root"/><propertyname="password"value="root"/></bean><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"><propertyname="dataSource"ref="dataSource"/></bean><beanid="xxx"class="Xxx"><propertyname="jdbcTemplate"ref="jdbcTemplate"/></bean> 1.配置數(shù)據(jù)源2.配置JDBC模板3.配置需要實例化的Bean注入數(shù)據(jù)源注入JDBC模板SpringJDBC的配置11

關于上述示例dataSource配置中的4個屬性說明,如下表所示:注意:上表中的屬性值在實際配置時,需要根據(jù)數(shù)據(jù)庫類型和設置進行相應配置。屬性名含義driverClassName所使用的驅動名稱,對應驅動JAR包中的Driver類url數(shù)據(jù)源所在地址username訪問數(shù)據(jù)庫的用戶名password訪問數(shù)據(jù)庫的密碼SpringJdbcTemplate類

的常用方法02第9章Spring的數(shù)據(jù)庫開發(fā)及事務管理SpringJdbcTemplate的常用方法13

在JdbcTemplate核心類中,提供了大量的更新和查詢數(shù)據(jù)庫的方法,我們就是使用的這些方法來操作數(shù)據(jù)庫的。execute()execute(Stringsql)方法可用于執(zhí)行sql語句update()update()用于執(zhí)行插入、更新和刪除操作query()query()用于執(zhí)行數(shù)據(jù)查詢操作execute()14

使用execute(Stringsql)方法執(zhí)行建表的案例實現(xiàn)步驟如下:在MySQL中創(chuàng)建一個名為spring的數(shù)據(jù)庫;創(chuàng)建Web項目,導入相關Jar包;創(chuàng)建Spring配置文件,配置數(shù)據(jù)源和JDBC模板;創(chuàng)建測試類,測試程序。publicclassJdbcTemplateTest{publicstaticvoidmain(String[]args){ApplicationContextapplicationContext= newClassPathXmlApplicationContext("applicationContext.xml");JdbcTemplatejdTemplate=(JdbcTemplate)applicationContext.getBean("jdbcTemplate");jdTemplate.execute("createtableaccount("idintprimarykeyauto_increment,"+ "usernamevarchar(50),"+ "balancedouble)");}}<beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><propertyname="driverClassName"value="com.mysql.jdbc.Driver"/> <propertyname="url"value="jdbc:mysql://localhost/spring"/> <propertyname="username"value="root"/> <propertyname="password"value="root"/></bean><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"/></bean>update()15

update()方法可以完成插入、更新和刪除數(shù)據(jù)的操作。在JdbcTemplate類中,提供了一系列的update()方法,其常用方法下表所示:方法說明intupdate(Stringsql)該方法是update方法的重載形式,可直接執(zhí)行傳入的SQL語句,并返回受影響的行數(shù)intupdate(PreparedStatementCreatorpsc)該方法執(zhí)行從PreparedStatementCreator返回的語句,并返回受影響的行數(shù)intupdate(Stringsql,PreparedStatementSetterpss)該方法通過PreparedStatementSetter設置SQL語句中的參數(shù),并返回受影響的行數(shù)intupdate(Stringsql,Object...args)該方法使用Object...設置SQL語句中的參數(shù),要求參數(shù)不能為NULL,并返回受影響的行數(shù)query()16

JdbcTemplate類中還提供了大量的query()方法來處理各種對數(shù)據(jù)庫表的查詢操作。其中,常用的幾個query()方法如下表所示:方法說明Listquery(Stringsql,RowMapperrowMapper)執(zhí)行String類型參數(shù)提供的SQL語句,并通過RowMapper返回一個List類型的結果Listquery(Stringsql,PreparedStatementSetterpss,RowMapperrowMapper)根據(jù)String類型參數(shù)提供的SQL語句創(chuàng)建PreparedStatement對象,通過RowMapper將結果返回List中Listquery(Stringsql,Object[]args,RowMapperrowMapper)使用Object[]的值來設置SQL語句中的參數(shù)值,采用RowMapper回調(diào)方法可以直接返回List類型的數(shù)據(jù)queryForObject(Stringsql,RowMapperrowMapper,Object...args)將args參數(shù)綁定到SQL語句中,并通過RowMapper返回一個Object類型的單行記錄queryForList(Stringsql,Object[]args,class<T>elementType)該方法可以返回多行數(shù)據(jù)的結果,但必須是返回列表,elementType參數(shù)返回的是List元素類型Spring事務

管理概述03第9章Spring的數(shù)據(jù)庫開發(fā)及事務管理什么是Spring的事務管理?Spring事務管理概述18

在實際開發(fā)中,操作數(shù)據(jù)庫時都會涉及到事務管理問題,為此Spring提供了專門用于事務處理的API。Spring的事務管理簡化了傳統(tǒng)的事務管理流程,并且在一定程度上減少了開發(fā)者的工作量。事務管理的核心接口19

在Spring的所有JAR包中,包含一個名為spring-tx.RELEASE的JAR包,該包就是Spring提供的用于事務管理的依賴包。在該JAR包的org.springframework.transaction包中,有3個接口文件PlatformTransactionManager、TransactionDefinition和TransactionStatus,如下圖所示:Spring事務管理的三個核心接口事務管理的核心接口201.PlatformTransactionManager

PlatformTransactionManager接口是Spring提供的平臺事務管理器,主要用于管理事務。該接口中提供了三個事務操作的方法,具體如下:TransactionStatusgetTransaction(TransactionDefinitiondefinition);用于獲取事務狀態(tài)信息voidcommit(TransactionStatusstatus);用于提交事務voidrollback(TransactionStatusstatus);用于回滾事務事務管理的核心接口21PlatformTransactionManager接口只是代表事務管理的接口,并不知道底層是如何管理事務的,具體如何管理事務則由它的實現(xiàn)類來完成。該接口常見的幾個實現(xiàn)類如下:1org.springframework.jdbc.datasource.DataSourceTransactionManager用于配置JDBC數(shù)據(jù)源的事務管理器2org.springframework.orm.hibernate4.HibernateTransactionManager用于配置Hibernate的事務管理器3org.springframework.transaction.jta.JtaTransactionManager用于配置全局事務管理器小提示:當?shù)讓硬捎貌煌某志脤蛹夹g時,系統(tǒng)只需使用不同的PlatformTransactionManager實現(xiàn)類即可。常用接口實現(xiàn)類事務管理的核心接口222.TransactionDefinition

TransactionDefinition接口是事務定義(描述)的對象,該對象中定義了事務規(guī)則,并提供了獲取事務相關信息的方法,具體如下:StringgetName();獲取事務對象名稱intgetIsolationLevel();獲取事務的隔離級別intgetPropagationBehavior();獲取事務的傳播行為intgetTimeout();獲取事務的超時時間booleanisReadOnly();獲取事務是否只讀屬性名稱值描述PROPAGATION_REQUIREDREQUIRED表示當前方法必須運行在一個事務環(huán)境當中,如果當前方法已處于事務環(huán)境中,則可以直接使用該方法,否則在開啟一個新事務后執(zhí)行該方法PROPAGATION_SUPPORTSSUPPORTS如果當前方法處于事務環(huán)境中,則使用當前事務,否則不使用事務PROPAGATION_MANDATORYMANDATORY表示調(diào)用該方法的線程必須處于當前事務環(huán)境中,否則拋出異常PROPAGATION_REQUIRES_NEWREQUIRES_NEW要求方法在新的事務環(huán)境中執(zhí)行。如果當前方法已在事務環(huán)境中,則先暫停當前事務,在啟動新的事務后執(zhí)行該方法;如果當前方法不在事務環(huán)境中,則在啟動一個新的事務后執(zhí)行該方法PROPAGATION_NONSUPPORTEDNOT_SUPPORTED不支持當前事務,總是以非事務狀態(tài)執(zhí)行。如果調(diào)用該方法的線程處于事務環(huán)境中,則先暫停當前事務,然后執(zhí)行該方法PROPAGATION_NEVERNEVER不支持當前事務。如果調(diào)用該方法的線程處于事務環(huán)境中,則拋出異常PROPAGATION_NESTEDNESTED即使當前執(zhí)行的方法處于事務環(huán)境中,依然會啟動一個新的事務,并且方法在嵌套的事務里執(zhí)行。即使當前執(zhí)行的方法不在事務環(huán)境中,也會啟動一個新事務,然后執(zhí)行該方法事務管理的核心接口23

上述方法中,事務的傳播行為是指在同一個方法中,不同操作前后所使用的事務。傳播行為有很多種,具體如下表所示:

在事務管理過程中,傳播行為可以控制是否需要創(chuàng)建事務以及如何創(chuàng)建事務,通常情況下,數(shù)據(jù)的查詢不會影響原數(shù)據(jù)的改變,所以不需要進行事務管理,而對于數(shù)據(jù)的插入、更新和刪除操作,必須進行事務管理。如果沒有指定事務的傳播行為,Spring默認傳播行為是REQUIRED。事務管理的核心接口243.TransactionStatusTransactionStatus接口是事務的狀態(tài),它描述了某一時間點上事務的狀態(tài)信息。該接口中包含6個方法,具體如下:voidflush();刷新事務booleanhasSavepoint();獲取是否存在保存點booleanisCompleted();獲取事務是否完成booleanisNewTransaction();獲取是否為新事務booleanisRollbackOnly();獲取事務是否回滾voidsetRollbackOnly();設置事務回滾事務管理的方式25通過編寫代碼實現(xiàn)的事務管理,包括定義事務的開始、正常執(zhí)行后的事務提交和異常時的事務回滾編程式事務管理聲明式事務管理通過AOP技術實現(xiàn)的事務管理,主要思想是將事務作為一個“切面”代碼單獨編寫,然后通過AOP技術將事務管理的“切面”植入到業(yè)務目標類中Spring事務管理分兩種方式

聲明式事務管理最大的優(yōu)點在于開發(fā)者無需通過編程的方式來管理事務,只需在配置文件中進行相關的事務規(guī)則聲明,就可以將事務應用到業(yè)務邏輯中。這使得開發(fā)人員可以更加專注于核心業(yè)務邏輯代碼的編寫,在一定程度上減少了工作量,提高了開發(fā)效率,所以在實際開發(fā)中,通常都推薦使用聲明式事務管理。聲明式事務管理04第9章Spring的數(shù)據(jù)庫開發(fā)及事務管理如何實現(xiàn)Spring的聲明式事務管理?聲明式事務管理27

Spring的聲明式事務管理可以通過兩種方式來實現(xiàn),一種是基于XML的方式,另一種是基于Annotation的方式。接下來的兩個小節(jié)中,將對這兩種聲明式事務管理方式進行詳細講解。

基于XML方式的聲明式事務是在配置文件中通過<tx:advice>元素配置事務規(guī)則來實現(xiàn)的。當配置了事務的增強處理后,就可以通過編寫的AOP配置,讓Spring自動對目標生成代理。<tx:advice>元素及其子元素如下圖所示:基于XML方式的聲明式事務28

配置<tx:advice>元素的重點是配置<tx:method>子元素,上圖中使用灰色標注的幾個屬性是<tx:method>元素中的常用屬性。其屬性描述具體如下:基于XML方式的聲明式事務29屬性名稱描述name該屬性為必選屬性,它指定了與事務屬性相關的方法名,其屬性值支持使用通配符,如'get*'、'handle*'、'*Order'等propagation用于指定事務的傳播行為,其屬性值就是表9-5中的值,它的默認值為REQUIREDisolation該屬性用于指定事務的隔離級別,其屬性值可以為DEFAULT、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE。它的默認值為DEFAULTread-only該屬性用于指定事務是否只讀,其默認值為falsetimeout該屬性用于指定事務超時的時間,其默認值為-1,即永不超時rollback-for該屬性用于指定觸發(fā)事務回滾的異常類,在指定多個異常類時,異常類之間以英文逗號分隔no-rollback-for該屬性用于指定不觸發(fā)事務回滾的異常類,在指定多個異常類時,異常類之間以英文逗號分隔基于Annotation方式的聲明式事務1在Spring容器中注冊事務注解驅動;2在需要事務管理的類或方法上使用@Transactional注解。<tx:annotation-driventransaction-manager="transactionManager"/>

如果將注解添加在Bean類上,則表示事務的設置對整個Bean類的所有方法都起作用;如果將注解添加在Bean類中的某個方法上,則表示事務的設置只對該方法有效?;贏nnotation方式的聲明式事務30

使用@Transactional注解時,可以通過參數(shù)配置事務詳情:基于Annotation方式的聲明式事務31屬性類型說明valueString用于指定需要使用的事務管理器,默認為"",其別名為transactionManagertransactionManager指定事務的限定符值,可用于確定目標事務管理器,匹配特定的限定值(或者Bean的name值),默認為"",其別名為valuepropagation枚舉型:Propagation可選的傳播性設置,用于指定事務的傳播行為,默認為Propagation.REQUIRED。使用舉例:@Transactional(propagation=Propagation.REQUIRES_NEW)isolation枚舉型:Isolation可選的隔離性級別,用于指定事務的隔離級別,默認為Isolation.DEFAULT(底層事務的隔離級別)。使

溫馨提示

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

評論

0/150

提交評論