Java EE企業(yè)級(jí)應(yīng)用開發(fā)教程課件 第4章 Spring的數(shù)據(jù)庫編程_第1頁
Java EE企業(yè)級(jí)應(yīng)用開發(fā)教程課件 第4章 Spring的數(shù)據(jù)庫編程_第2頁
Java EE企業(yè)級(jí)應(yīng)用開發(fā)教程課件 第4章 Spring的數(shù)據(jù)庫編程_第3頁
Java EE企業(yè)級(jí)應(yīng)用開發(fā)教程課件 第4章 Spring的數(shù)據(jù)庫編程_第4頁
Java EE企業(yè)級(jí)應(yīng)用開發(fā)教程課件 第4章 Spring的數(shù)據(jù)庫編程_第5頁
已閱讀5頁,還剩57頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章Spring的數(shù)據(jù)庫編程《JavaEE企業(yè)級(jí)應(yīng)用開發(fā)教程(Spring+SpringMVC+MyBatis)》學(xué)習(xí)目標(biāo)/Target了解JdbcTemplate的相關(guān)概念,能夠簡述JdbcTemplate的作用了解Spring事務(wù)管理的概念,能夠簡述Spring事務(wù)管理的作用掌握J(rèn)dbcTemplate的增刪改查操作熟悉基于XML方式的事務(wù)管理掌握注解方式的事務(wù)管理章節(jié)概述/Summary在Java企業(yè)級(jí)開發(fā)中,應(yīng)用程序?qū)?shù)據(jù)庫的操作是不可或缺的一環(huán),然而,傳統(tǒng)的JDBC操作方式相對(duì)煩瑣且容易出錯(cuò),尤其是在處理資源管理和事務(wù)控制時(shí)。作為一站式服務(wù)框架,Spring框架的SpringJDBC模塊提供了強(qiáng)大的數(shù)據(jù)庫編程支持。同時(shí),為解決操作數(shù)據(jù)庫時(shí)的事務(wù)問題,Spring框架還提供了事務(wù)管理功能。在Spring的數(shù)據(jù)庫編程中,SpringJDBC模塊中的JdbcTemplate和Spring的事務(wù)管理最為常見,本章將對(duì)Spring的數(shù)據(jù)庫編程中這兩部分進(jìn)行講解。目錄/Contents4.14.2JdbcTemplateSpring事務(wù)管理概述4.3聲明式事務(wù)管理JdbcTemplate4.14.1

JdbcTemplateSpring框架中的SpringJDBC模塊對(duì)JDBCAPI進(jìn)行了封裝,主要目的是降低JDBCAPI的使用難度,以一種更直接、更簡潔的方式使用JDBCAPI。使用SpringJDBC,開發(fā)人員只需定義必要的參數(shù),指定需要執(zhí)行的SQL語句,就可以輕松地進(jìn)行JDBC編程。同時(shí),SpringJDBC能夠負(fù)責(zé)驅(qū)動(dòng)的加載、數(shù)據(jù)庫連接的開啟與關(guān)閉、SQL語句的創(chuàng)建與執(zhí)行、異常處理以及事務(wù)處理等煩瑣的工作,這樣開發(fā)人員就能夠從煩瑣的JDBCAPI中解脫出來,有更多的精力專注于業(yè)務(wù)的開發(fā)。為了簡化JDBC的開發(fā),SpringJDBC提供了多個(gè)實(shí)用的數(shù)據(jù)庫訪問工具,其中最常用的就是JdbcTemplate。下面對(duì)JdbcTemplate的進(jìn)行講解。4.1.1

JdbcTemplate概述先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!了解JdbcTemplate的相關(guān)概念,能夠簡述JdbcTemplate的作用4.1.1

JdbcTemplate概述object(對(duì)象包)包含了與對(duì)象映射相關(guān)的類和接口core(核心包)包含SpringJDBC的核心類和接口,其中最重要的是JdbcTemplate類support(支持包)包含了一些額外的支持類和工具類,可以提供更便利的數(shù)據(jù)庫操作dataSource(數(shù)據(jù)源包)包含與數(shù)據(jù)源相關(guān)的類和接口,用于配置和管理數(shù)據(jù)庫連接SpringJDBC模塊主要的包4.1.1

JdbcTemplate概述JdbcTemplate提供了豐富的方法來支持?jǐn)?shù)據(jù)庫操作,包括插入、查詢、更新和刪除,并可以通過參數(shù)傳遞來設(shè)置SQL語句中的占位符。JdbcTemplate常見的數(shù)據(jù)庫操作方法如下。方法說明intupdate(Stringsql)用于執(zhí)行給定的SQL語句,并返回受影響的行數(shù)。通常用于執(zhí)行INSERT、UPDATE和DELETE等操作intupdate(Stringsql,Object...args)用于執(zhí)行給定的SQL語句,并返回受影響的行數(shù)。args參數(shù)是一個(gè)可變長度的數(shù)組,用于傳遞SQL語句中的參數(shù)值int[]batchUpdate(Stringsql,List<Object[]>batchArgs)用于執(zhí)行給定的SQL,并返回每個(gè)SQL語句執(zhí)行影響的行數(shù)。batchArgs是一個(gè)參數(shù)數(shù)組的列表,列表中的每個(gè)數(shù)組對(duì)應(yīng)一條SQL語句的參數(shù)值4.1.1

JdbcTemplate概述方法說明List<T>query(Stringsql,RowMapper<T>rowMapper)用于執(zhí)行給定的SQL語句,并使用提供的RowMapper將每行的結(jié)果映射為對(duì)象List<T>query(Stringsql,Object[]args,RowMapper<T>rowMapper)用于執(zhí)行帶有參數(shù)的查詢SQL語句,并使用提供的RowMapper將每行的結(jié)果映射為對(duì)象。args參數(shù)是一個(gè)可變長度的數(shù)組,用于傳遞SQL語句中的參數(shù)值TqueryForObject(Stringsql,RowMapper<T>rowMapper,Object...args)用于執(zhí)行帶有參數(shù)的查詢SQL語句,并通過RowMapper返回一個(gè)Object類型的單行記錄4.1.1

JdbcTemplate概述方法說明Map<String,Object>queryForMap(Stringsql,Object...args)用于執(zhí)行帶有參數(shù)的查詢SQL語句,并將單行結(jié)果映射為一個(gè)Map對(duì)象。args參數(shù)是一個(gè)可變長度的數(shù)組,用于傳遞SQL語句中的參數(shù)值List<T>queryForList(Stringsql,Class<T>elementType,Object...args)用于執(zhí)行帶有參數(shù)的查詢SQL語句,并將多行結(jié)果映射為一個(gè)List對(duì)象。elementType參數(shù)用于指定查詢結(jié)果被映射的類型,args參數(shù)是一個(gè)可變長度的數(shù)組,用于傳遞SQL語句中的參數(shù)值voidexecute(Stringsql)用于執(zhí)行任意的SQL語句,不返回任何結(jié)果。通常用于執(zhí)行DDL語句或者不需要返回結(jié)果的SQL操作4.1.2JdbcTemplate的使用先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握J(rèn)dbcTemplate的增刪改查操作4.1.2JdbcTemplate的使用數(shù)據(jù)源是JdbcTemplate連接數(shù)據(jù)庫的橋梁,開發(fā)者需要配置一個(gè)數(shù)據(jù)源對(duì)象,并將其注入JdbcTemplate中1.配置數(shù)據(jù)源通過Spring的配置文件或注解方式,將數(shù)據(jù)源對(duì)象注入JdbcTemplate中,從而創(chuàng)建一個(gè)JdbcTemplate對(duì)象2.創(chuàng)建JdbcTemplate對(duì)象使用JdbcTemplate提供的各種方法,如update、query等,執(zhí)行增刪改查等數(shù)據(jù)庫操作3.執(zhí)行數(shù)據(jù)庫操作JdbcTemplate的使用的步驟4.1.2JdbcTemplate的使用下面通過案例對(duì)JdbcTemplate常用增刪改查方法的操作進(jìn)行演示。1.創(chuàng)建項(xiàng)目并引入依賴文件4-1pom.xml源代碼在IDEA中創(chuàng)建名稱為chapter04的Maven項(xiàng)目,并在項(xiàng)目的pom.xml文件中引入Spring的核心依賴、數(shù)據(jù)庫和單元測試相關(guān)的依賴,具體如文件4-1所示。4.1.2JdbcTemplate的使用2.創(chuàng)建數(shù)據(jù)表和配置連接數(shù)據(jù)庫的信息文件4-2account.sql源代碼使用JdbcTemplate執(zhí)行增刪改查操作時(shí),需要在對(duì)應(yīng)的SQL語句中指定所操作的數(shù)據(jù)表,在此先創(chuàng)建本案例所需的數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表的語句如文件4-2所示。4.1.2JdbcTemplate的使用2.創(chuàng)建數(shù)據(jù)表和配置連接數(shù)據(jù)庫的信息文件4-3perties源代碼在chapter04的resources目錄下創(chuàng)建配置文件perties,在該配置文件中配置連接數(shù)據(jù)庫的信息,具體如文件4-3所示。4.1.2JdbcTemplate的使用3.創(chuàng)建Spring配置類并配置數(shù)據(jù)源和JdbcTemplate文件4-4DataSourceConfig.java源代碼在項(xiàng)目中創(chuàng)建com.itheima.config包,在該包中創(chuàng)建Spring的配置類,在該配置類中加載perties文件中的信息配置數(shù)據(jù)源,并基于數(shù)據(jù)源創(chuàng)建JdbcTemplate對(duì)象交由Spring管理,具體如文件4-4所示。4.1.2JdbcTemplate的使用4.創(chuàng)建實(shí)體類文件4-5Account.java源代碼在項(xiàng)目中創(chuàng)建com.itheima.pojo包,在該包中創(chuàng)建實(shí)體類Account,在Account類中定義id、username和balance屬性,以及其對(duì)應(yīng)的getter/setter方法,具體如文件4-5所示。4.1.2JdbcTemplate的使用5.創(chuàng)建Dao接口和對(duì)應(yīng)的實(shí)現(xiàn)類文件4-6

AccountDao.java文件4-7

AccountDaoImpl.java源代碼在項(xiàng)目中創(chuàng)建com.itheima.dao包,在該包中創(chuàng)建操作賬戶信息的Dao接口和接口對(duì)應(yīng)的實(shí)現(xiàn)類,接口中定義了對(duì)賬戶的增刪改查方法,具體如文件4-6和文件4-7所示。4.1.2JdbcTemplate的使用6.創(chuàng)建測試類文件4-8JDBCTest.java源代碼在項(xiàng)目的test\java目錄下創(chuàng)建測試類JDBCTest,在測試類中注入AccountDao對(duì)象,具體如文件4-8所示。4.1.2JdbcTemplate的使用7.定義測試方法并測試效果(1)添加單個(gè)信息并查詢的方法在JdbcTemplate類中定義測試方法添加單個(gè)賬戶信息并根據(jù)賬戶id查詢賬戶信息,具體如下所示。testAddAccount()源代碼4.1.2JdbcTemplate的使用7.定義測試方法并測試效果運(yùn)行testAddAccount()方法,運(yùn)行結(jié)果如下圖所示。4.1.2JdbcTemplate的使用7.定義測試方法并測試效果(2)批量添加和查詢方法在JdbcTemplate類中定義將查詢結(jié)果封裝到Map和List的測試方法,以及批量添加賬戶信息的測試方法,具體如下所示。批量添加和查詢方法源代碼4.1.2JdbcTemplate的使用7.定義測試方法并測試效果運(yùn)行testQueryAccountForMap()方法,運(yùn)行結(jié)果如下圖所示。4.1.2JdbcTemplate的使用7.定義測試方法并測試效果運(yùn)行testAddAccountList()方法,運(yùn)行結(jié)果如下圖所示。4.1.2JdbcTemplate的使用7.定義測試方法并測試效果(3)修改和刪除方法在JdbcTemplate類中定義測試修改和刪除賬戶信息的測試方法,具體如下所示。修改和刪除方法源代碼4.1.2JdbcTemplate的使用7.定義測試方法并測試效果運(yùn)行testEditAccount()方法,運(yùn)行結(jié)果如下圖所示。4.1.2JdbcTemplate的使用7.定義測試方法并測試效果運(yùn)行testDelAccount()方法,運(yùn)行結(jié)果如下圖所示。Spring事務(wù)管理概述4.24.2Spring事務(wù)管理概述先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!了解Spring事務(wù)管理的概念,能夠簡述Spring事務(wù)管理的作用4.2Spring事務(wù)管理概述在實(shí)際開發(fā)中,為了確保數(shù)據(jù)的完整性和一致性,通常需要在操作數(shù)據(jù)時(shí)進(jìn)行事務(wù)管理,使一系列增加、修改、刪除數(shù)據(jù)的操作要么全部成功,要么全部失敗。Spring作為提供了一站式解決方案的框架,也提供了強(qiáng)大的事務(wù)管理功能。Spring的事務(wù)管理主要基于PlatformTransactionManager接口、TransactionDefinition接口、TransactionStatus接口實(shí)現(xiàn),下面分別對(duì)這三個(gè)接口進(jìn)行講解。4.2Spring事務(wù)管理概述1.PlatformTransactionManager接口PlatformTransactionManager接口是Spring事務(wù)管理的核心,它提供了管理事務(wù)的方法,例如開始事務(wù)、提交事務(wù)、回滾事務(wù)等,該接口中提供了3個(gè)管理事務(wù)的方法,具體如下所示。方法說明TransactionStatusgetTransaction(

TransactionDefinitiondefinition)用于獲取一個(gè)新的事務(wù)或者參與到已存在的事務(wù)中,并返回事務(wù)的狀態(tài)信息void

commit(TransactionStatusstatus)用于提交事務(wù)voidrollback(TransactionStatusstatus)用于回滾事務(wù)4.2Spring事務(wù)管理概述2.TransactionDefinition接口TransactionDefinition接口中定義了事務(wù)描述相關(guān)的常量,其中包括了事務(wù)的隔離級(jí)別、事務(wù)的傳播行為、事務(wù)的超時(shí)時(shí)間和是否為只讀事務(wù)。(1)事務(wù)的隔離級(jí)別事務(wù)的隔離級(jí)別是指事務(wù)之間的隔離程度,TransactionDefinition接口中定義了5種隔離級(jí)別。4.2Spring事務(wù)管理概述隔離級(jí)別說明ISOLATION_DEFAULT采用當(dāng)前數(shù)據(jù)庫默認(rèn)的事務(wù)隔離級(jí)別ISOLATION_READ_UNCOMMITTED表示讀未提交。允許另外一個(gè)事務(wù)讀取到當(dāng)前事務(wù)未提交的數(shù)據(jù),隔離級(jí)別最低,可能會(huì)導(dǎo)致臟讀、幻讀或不可重復(fù)讀ISOLATION_READ_COMMITTED表示讀已提交。被一個(gè)事務(wù)修改的數(shù)據(jù)提交后才能被另一個(gè)事務(wù)讀取,可以避免臟讀,無法避免幻讀,而且不可重復(fù)讀ISOLATION_REPEATABLE_READ可重復(fù)讀,這個(gè)隔離級(jí)別保證了在同一個(gè)事務(wù)中多次讀取同一數(shù)據(jù)的結(jié)果是一致的,可以避免臟讀,資源消耗上升。這是MySQL數(shù)據(jù)庫的默認(rèn)隔離級(jí)別REPEATABLE_SERIALIZABLE事務(wù)串行執(zhí)行,也就是按照時(shí)間順序一一執(zhí)行多個(gè)事務(wù),不存在并發(fā)問題,最可靠,但性能與效率最低4.2Spring事務(wù)管理概述(2)事務(wù)的傳播行為事務(wù)的傳播行為是指處于不同事務(wù)中的方法在相互調(diào)用時(shí),方法執(zhí)行期間,事務(wù)的維護(hù)情況。例如,當(dāng)一個(gè)事務(wù)的方法B調(diào)用另一個(gè)事務(wù)的方法A時(shí),可以規(guī)定A方法繼續(xù)在B方法所屬的現(xiàn)有事務(wù)中運(yùn)行,也可以規(guī)定A方法開啟一個(gè)新事務(wù),在新事務(wù)中運(yùn)行,B方法所屬的現(xiàn)有事務(wù)先掛起,等A方法的新事務(wù)執(zhí)行完畢后再恢復(fù)。4.2Spring事務(wù)管理概述傳播行為說明PROPAGATION_REQUIRED默認(rèn)的事務(wù)傳播行為。如果當(dāng)前存在一個(gè)事務(wù),則加入該事務(wù);如果當(dāng)前沒有事務(wù),則創(chuàng)建一個(gè)新的事務(wù)PROPAGATION_SUPPORTS如果當(dāng)前存在一個(gè)事務(wù),則加入該事務(wù);如果當(dāng)前沒有事務(wù),則以非事務(wù)方式執(zhí)行PROPAGATION_MANDATORY當(dāng)前必須存在一個(gè)事務(wù),如果沒有,就拋出異常PROPAGATION_REQUIRES_NEW創(chuàng)建一個(gè)新的事務(wù),如果當(dāng)前已存在一個(gè)事務(wù),將已存在的事務(wù)掛起PROPAGATION_NOT_SUPPORTED總是以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則把當(dāng)前事務(wù)掛起PROPAGATION_NEVER永遠(yuǎn)不支持當(dāng)前事務(wù),如果當(dāng)前已存在一個(gè)事務(wù),則拋出異常PROPAGATION_NESTED如果當(dāng)前存在事務(wù),則在當(dāng)前事務(wù)的一個(gè)子事務(wù)中執(zhí)行4.2Spring事務(wù)管理概述(3)事務(wù)的超時(shí)時(shí)間事務(wù)的超時(shí)時(shí)間是指事務(wù)執(zhí)行的時(shí)間界限,超過這個(gè)時(shí)間界限,事務(wù)將會(huì)回滾。TransactionDefinition接口提供了TIMEOUT_DEFAULT常量用于表示Spring事務(wù)管理器的默認(rèn)超時(shí)時(shí)間。如果開發(fā)者想要自行指定事務(wù)的超時(shí)時(shí)間,可以使用DefaultTransactionDefinition類的setTimeout()方法或@Transactional注解的timeout屬性實(shí)現(xiàn)。4.2Spring事務(wù)管理概述(4)事務(wù)是否只讀當(dāng)事務(wù)被標(biāo)記為只讀時(shí),意味著該事務(wù)只從數(shù)據(jù)庫中讀取數(shù)據(jù)而不修改數(shù)據(jù)。嘗試在只讀事務(wù)中修改數(shù)據(jù)通常會(huì)引發(fā)異常,這是因?yàn)榻^大多數(shù)數(shù)據(jù)庫和事務(wù)管理器會(huì)禁止在只讀事務(wù)中執(zhí)行寫操作。這種設(shè)計(jì)保證了數(shù)據(jù)的一致性和可靠性,同時(shí)也促進(jìn)了數(shù)據(jù)庫引擎對(duì)只讀事務(wù)的優(yōu)化,從而提高了系統(tǒng)的整體性能。4.2Spring事務(wù)管理概述TransactionDefinition接口中除了提供事務(wù)的隔離級(jí)別、事務(wù)的傳播行為、事務(wù)的超時(shí)時(shí)間和是否為只讀事務(wù)的常量外,還提供了一系列方法來獲取事務(wù)的屬性,TransactionDefinition接口常用的方法如下所示。方法說明intgetPropagationBehavior()返回事務(wù)的傳播行為intgetIsolationLevel()返回事務(wù)的隔離級(jí)別intgetTimeout()返回事務(wù)的超時(shí)時(shí)間booleanisReadOnly()判斷事務(wù)是否為只讀StringgetName()返回定義的事務(wù)名稱4.2Spring事務(wù)管理概述TransactionStatus接口主要用于界定事務(wù)的狀態(tài),它提供了一系列返回事務(wù)狀態(tài)信息的方法,具體如下。3.TransactionStatus接口方法說明booleanisNewTransaction()如果當(dāng)前方法是事務(wù)的起點(diǎn),那么說明當(dāng)前事務(wù)是新事務(wù)booleanhasSavepoint()判斷當(dāng)前事務(wù)是否創(chuàng)建了一個(gè)保存點(diǎn)booleanisRollbackOnly()判斷當(dāng)前事務(wù)是否被標(biāo)記為rollback-only,即事務(wù)是否只能執(zhí)行回滾操作而不能提交voidsetRollbackOnly()將當(dāng)前事務(wù)標(biāo)記為rollback-onlybooleanisCompleted()判斷當(dāng)前事務(wù)是否已經(jīng)完成,即事務(wù)是否已經(jīng)提交或回滾voidflush()刷新底層的修改到數(shù)據(jù)庫4.2Spring事務(wù)管理概述通過編寫代碼來管理事務(wù)的開始、提交、回滾等操作。開發(fā)人員可以在代碼中直接調(diào)用事務(wù)管理的API來實(shí)現(xiàn)對(duì)事務(wù)的控制編程式事務(wù)管理通過在配置文件中或者使用注解的方式來聲明事務(wù)的管理方式。聲明式事務(wù)管理通過AOP技術(shù)實(shí)現(xiàn)了事務(wù)的管理,開發(fā)人員可以將事務(wù)的管理與業(yè)務(wù)邏輯分離,使得代碼更加清晰簡潔聲明式事務(wù)管理事務(wù)管理方式聲明式事務(wù)管理4.34.3聲明式事務(wù)管理Spring的聲明式事務(wù)管理是企業(yè)級(jí)應(yīng)用中非常實(shí)用且被廣泛采用的一種方式,可以有效地簡化事務(wù)管理的實(shí)現(xiàn),提高代碼的質(zhì)量和可維護(hù)性。Spring的聲明式事務(wù)管理可以通過兩種方式來實(shí)現(xiàn),一種是基于XML的方式,另一種是基于注解的方式。本節(jié)將對(duì)這兩種聲明式事務(wù)管理方式進(jìn)行講解。4.3.1

基于XML方式的聲明式事務(wù)管理先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握基于XML方式的事務(wù)管理基于XML方式的聲明式事務(wù)管理是通過在XML配置文件中配置事務(wù)規(guī)則的相關(guān)聲明來實(shí)現(xiàn)的。在使用XML文件配置聲明式事務(wù)管理時(shí),首先要引入tx命名空間,在引入tx命名空間之后,可以使用<tx:advice>標(biāo)簽來配置事務(wù)的通知,實(shí)現(xiàn)事務(wù)管理。配置<tx:advice>標(biāo)簽時(shí),通常需要指定id和transaction-manager屬性,其中id屬性是配置文件中的唯一標(biāo)識(shí),transaction-manager屬性用于指定事務(wù)管理器。除此之外,<tx:advice>標(biāo)簽還包含子標(biāo)簽<tx:attributes>,<tx:attributes>標(biāo)簽可配置多個(gè)<tx:method>子標(biāo)簽,<tx:method>子標(biāo)簽主要用于配置每個(gè)方法具體的事務(wù)屬性,包括傳播行為、隔離級(jí)別、超時(shí)等。4.3.1

基于XML方式的聲明式事務(wù)管理4.3.1

基于XML方式的聲明式事務(wù)管理<tx:method>標(biāo)簽的常用屬性屬性說明name用于指定方法名的匹配模式,該屬性為必選屬性,它指定了與事務(wù)屬性相關(guān)的方法名propagation用于指定事務(wù)的傳播行為isolation用于指定事務(wù)的隔離級(jí)別read-only用于指定事務(wù)是否只讀timeout用于指定事務(wù)超時(shí)時(shí)間rollback-for用于指定觸發(fā)事務(wù)回滾的異常類no-rollback-for用于指定不觸發(fā)事務(wù)回滾的異常類4.3.1

基于XML方式的聲明式事務(wù)管理編寫一個(gè)模擬銀行轉(zhuǎn)賬的程序,要求在轉(zhuǎn)賬時(shí)通過Spring對(duì)事務(wù)進(jìn)行控制。(1)引入依賴引入依賴源代碼Spring的聲明式事務(wù)管理底層依賴于AOP技術(shù)來實(shí)現(xiàn),對(duì)此需要在chapter04項(xiàng)目的pom.xml文件中引入aspectjrt依賴和aspectjweaver依賴作為實(shí)現(xiàn)切面所需的依賴包,具體代碼如下所示。4.3.1

基于XML方式的聲明式事務(wù)管理(2)定義Dao層方法在文件4-6的AccountDao接口中聲明轉(zhuǎn)賬方法transfer(),其代碼如下所示。//轉(zhuǎn)賬publicvoidtransfer(StringoutUser,StringinUser,Doublemoney);4.3.1

基于XML方式的聲明式事務(wù)管理(3)實(shí)現(xiàn)Dao層方法在文件4-7的AccountDaoImpl實(shí)現(xiàn)類中實(shí)現(xiàn)AccountDao接口中的transfer()方法,其代碼如下所示。transfer()方法源代碼4.3.1

基于XML方式的聲明式事務(wù)管理(4)創(chuàng)建配置文件在chapter04項(xiàng)目中創(chuàng)建配置文件applicationContext.xml,在配置文件中配置事務(wù)管理器和事務(wù)通知,具體代碼如文件4-9所示。文件4-9applicationContext.xml源代碼4.3.1

基于XML方式的聲明式事務(wù)管理(5)創(chuàng)建測試類在chapter04項(xiàng)目的test\java目錄下創(chuàng)建測試類TransactionTest,在測試類中注入AccountDao對(duì)象,具體如文件4-10所示。文件4-10TransactionTest.java源代碼4.3.1

基于XML方式的聲明式事務(wù)管理(6)測試效果為了程序運(yùn)行前后的效果,在程序運(yùn)行前先查詢當(dāng)前account數(shù)據(jù)表中的數(shù)據(jù),具體如下圖所示。4.3.1

基于XML方式的聲明式事務(wù)管理(6)測試效果運(yùn)行文件4-10中的testTransfer()方法,再次查看account數(shù)據(jù)表中的數(shù)據(jù),具體如下圖所示。4.3.2

基于注解方式的聲明式事務(wù)管理先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握注解方式的事務(wù)管理基于XML實(shí)現(xiàn)聲明式事務(wù)管理存在一些缺點(diǎn),例如在Spring配置文件中需要編寫大量的AOP相關(guān)配置,這可能導(dǎo)致代碼冗余和可讀性降低。為了解決這一問題,可以采用基于注解方式的聲明式事務(wù)管理,從而簡化Spring配置文件?;谧⒔夥绞降穆暶魇绞聞?wù)管理,可以直接在需要應(yīng)用切面的類或方法上添加注解,指定切面的邏輯,而無需在XML配置文件中進(jìn)行繁瑣的配置。Spring提供了@Transactional注解來實(shí)現(xiàn)聲明式事務(wù)管理,該注解與XML配置中使用的<tx:advice>標(biāo)簽具有相同的功能。通過在需要事務(wù)管理的方法上添加@Transactional注解,可以自動(dòng)開啟、提交或回滾事務(wù),而無需在XML配置文件中顯式聲明事務(wù)通知。4.3.2

基于注解方式的聲明式事務(wù)管理4.3.2

基于注解方式的聲明式事務(wù)管理@Transactional可以標(biāo)注在接口、接口方法、類或類方法上,當(dāng)標(biāo)注類時(shí),該類的所有public方法都將具有同樣類型的事務(wù)屬性;當(dāng)標(biāo)注類中的方法時(shí),如果該類也標(biāo)注了@Transactional,那么類中方法的注解將會(huì)屏蔽類的注解。@Transactional的常用屬性如下所示。屬性說明value用于指定使用的事務(wù)管理器propagation用于指定事務(wù)的傳播行為isolation用于指定事務(wù)的隔離級(jí)別timeout用于指定事務(wù)的超時(shí)時(shí)間readonly用于指定事務(wù)是否為只讀rollbackFor用于指定導(dǎo)致事務(wù)回滾的異常類數(shù)組rollbackForClassName用于指定導(dǎo)致事務(wù)回滾的異常類名稱數(shù)組noRollbackFor用于指定不會(huì)導(dǎo)致事務(wù)回滾的異常類數(shù)組noRollbackForClassName用于指定不會(huì)導(dǎo)致事務(wù)回滾的異常類名稱數(shù)組當(dāng)使

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論