事務以及@Transcational注解

文章目錄

  • 1.事務的概念
  • 2.事務的四個特性
  • 3.關于@Transcational注解的理解
  • 4.使用場景
  • 5.舉例
  • 6.編程式事務管理
  • 7.相關知識

1.事務的概念

事務,是指作為單個邏輯工作單元執行的一系列操作,結果只有成功和失敗兩種,要么全部成功(全部提交),要么全部失敗(全部回滾),即使成功了一部分,也視為失敗,執行全部回滾操作。

2.事務的四個特性

原子性(Atomicity):對數據進行操作的時候,要么全部執行,要么全部不執行;
一致性(Consistency):和原子性密切相關,事務執行成功,就使數據庫從一個一致性狀態改變到另一個一致性狀態;
隔離性(Isolation):一個事務的執行,不會被其他事務干擾;
持續性(Durability):事務一旦提交成功,那么數據庫里的數據就會永久性地改變;

3.關于@Transcational注解的理解

spring支持"編程式事務管理"和"聲明式事務管理"兩種方式。

而@Transcational注解,就屬于使用聲明式事務管理,聲明式事務管理是建立在AOP之上的,其本質是對方法前后進行攔截,然后在目標方法開始之前創建或者加入一個事務,在執行完目標方法之后根據執行情況提交或者回滾事務。

聲明式事務最大的優點是不需要通過編程的方式管理事務,這樣就不需要在業務邏輯代碼中摻雜事務管理的代碼,只需要在配置文件中做相關的事務規則聲明(或通過@Transcational注解的方式),便可以將事務規則應用到業務邏輯中。

這種非侵入式的開發方式,是spring所提倡的,也正是這樣,聲明式事務優于編程式事務。

聲明式事務唯一的不足是,它最細程度只能達到方法級別,而編程式事務可以作用到代碼塊級別,彌補的辦法是可以將需要進行事務管理的代碼塊獨立為方法等。

4.使用場景

@Transcatinal 可以作用于接口、接口方法、類以及類方法上,當作用于類上時,該類的所有public方法都將具有該類型的事務屬性,我們也可以在方法級別使用該標注來覆蓋類級別的定義。
spring不建議將@Transcational使用在接口或者接口方法上,因為只有在使用基于接口的代理時它才會生效。
另外,@Transcational注解應該只被應用到public方法上,因為只有來自外部的方法調用才會被AOP代理捕獲,也就是,類內部方法調用本類內部的其他方法并不會引起事務行為,故只能是public方法,在protected、private或者默認的方法上使用,同時不能使用static的修飾符,若使用則會被忽略,也不會報任何異常。

5.舉例

@Transactional(rollbackFor = Exception.class)

我們舉例使用的@Transactional(rollbackFor = Exception.class),如果標注在一個方法上,表示在該方法拋出任何異常時,進行事務的回滾動作。

spring不止對捕獲數據訪問異常才會進行回滾,而是只要捕獲到了運行時異常都會進行回滾。

在項目中,@Transactional(rollbackFor=Exception.class),如果類加了這個注解,那么這個類里面的方法拋出異常,就會回滾,數據庫里面的數據也會回滾。

在@Transactional注解中如果不配置rollbackFor屬性,那么事物只會在遇到RuntimeException的時候才會回滾,加上rollbackFor =Exception.class,可以讓事物在遇到非運行時異常時也回滾。

6.編程式事務管理

 public FunctionResult delete(List<String> standardIdList) {if (standardIdList==null||standardIdList.size()==0){return new FunctionResult(ErrorCode.SpeExaStandardDeleteListIsNull);}TransactionStatus transactionStatus=transactionManager.startTransaction();int cnt = 0;for(String standardId:standardIdList) {try {cnt = speExaStandardDOMapper.deleteByPrimaryKey(standardId);}catch (Exception e){LogHelper.fatal(e.getMessage(),e);return new FunctionResult(ErrorCode.SpecialExaminationStandardDeleteFail);}finally{if (cnt <= 0) {transactionManager.rollback(transactionStatus);}else{transactionManager.commit(transactionStatus);}}}return new FunctionResult(ErrorCode.Success);}

7.相關知識

@transactional作用和事務

@Transcational的原理和使用

spring聲明式事務 同一類內方法調用事務失效

Spring中的@Transactional(rollbackFor = Exception.class)屬性詳解

@Transactional(rollbackFor=Exception.class)的使用

Spring事務管理實現方式之編程式事務與聲明式事務詳解

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452198.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452198.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452198.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

提高代碼復用率

由于現在的互聯網企業業務比較繁忙&#xff0c;導致產品狗不停地提需求&#xff0c;還總是改來改去&#xff0c;最后留給程序猿的時間少之又少。程序猿也不是吃素的&#xff0c;干脆直接copy一下代碼隨便搞一下實現功能就行&#xff0c;也談不上所謂的精心設計了。這樣的確是縮…

java 對 redis 的基本操作

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、server端安裝 1、下載https://github.com/MSOpenTech/redis 可看到當前可下載版本&#xff1a;redis2.6 2、安裝 1&#xff09;解壓…

JsRender 前端渲染模板常用API學習

JsRender 常用API 1. $.templates() $.templates()方法是用來注冊或編譯模板的&#xff0c;使用的情況有以下幾種。 把html字符串編譯編譯成模板獲取使用script標簽聲明的模板&#xff0c;并返回一個模板對象把html字符串或者在script標簽中聲明的模板注冊成命名模板獲取之前就…

狀態圖

狀態圖(Statechart Diagram)是描述一個實體基于事件反應的動態行為&#xff0c;顯示了該實體如何根據當前所處的狀態對不同的事件做出反應。通常我們創建一個UML狀態圖是為了以下的研究目的&#xff1a;研究類、角色、子系統、或組件的復雜行為。

我身邊的手機應用開發者

手機應用火了&#xff0c;我身邊的一位朋友(A君)也投身到開發者行列&#xff0c;不過他還算聰明并沒有辭掉工作專做手機應用軟件開發。 其原因在于他們領導打算做一款自己的應用軟件&#xff0c;正當A君愁到底是做IOS平臺還是Android平臺的時候&#xff0c;領導說&#xff1a;…

學成在線--16.添加課程計劃

文章目錄一.需求分析二.API接口三.后端1.Dao2.Service3.Controller4.測試四.前端1.頁面原型說明1&#xff09;添加按鈕2&#xff09;視圖部分3&#xff09;在數據模型中添加如下變量4&#xff09;定義表單提交方法和重置方法2.Api調用1&#xff09;定義 api方法2&#xff09;調…

mac 下的操作

nodejs在Mac下的卸載 在 node 官網上下載的安裝包&#xff0c;用安裝包安裝的node.應該可以用一下命令行卸載&#xff1a; 在終端輸入以下命令&#xff1a; sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*} 刪除/usr/local/lib中的…

理解 maven 的核心概念

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 本文以類圖的方式&#xff0c;介紹 maven 核心的 12 個概念及相互之間的關系。 Table of Contents 1 maven管理的目標&#xff1a;工程…

時間跟蹤圖

事件跟蹤圖實質上是擴充的腳本&#xff0c;可以認為事件跟蹤圖是簡化的UML順序圖。

1088. [SCOI2005]掃雷Mine【網格DP】

Description 相信大家都玩過掃雷的游戲。那是在一個n*m的矩陣里面有一些雷&#xff0c;要你根據一些信息找出雷來。萬圣節到了 &#xff0c;“余”人國流行起了一種簡單的掃雷游戲&#xff0c;這個游戲規則和掃雷一樣&#xff0c;如果某個格子沒有雷&#xff0c;那么它里面的數…

spring data jpa和mybatis的不同

使用spring data JPA和mybatis都是用來訪問數據庫&#xff0c;但他們的分工不同&#xff1a; 1.spring data jpa默認使用hibernate作為ORM實現&#xff0c;是spring 提供的一套jpa接口&#xff0c;使用spring data jpa主要完成一些簡單的增刪改查功能。 2.對于復雜的查詢功能會…

函數式編程很難,這正是你要學習它的原因

很奇怪不是&#xff0c;很少有人每天都使用函數式編程語言。如果你用Scala&#xff0c;Haskell&#xff0c;Erlang&#xff0c;F#或某個Lisp方言來編程&#xff0c;很可能沒有公司會花錢聘你。這個行業里的絕大部分人都是使用像Python&#xff0c;Ruby&#xff0c;Java或C#等面…

函數依賴

設R(U)是一個屬性集U上的關系模式&#xff0c;X和Y是U的子集。若對于R(U)的任意一個可能的關系r&#xff0c;r 中不可能存在兩個元組在X上的屬性值相等&#xff0c; 而在Y上的屬性值不等&#xff0c; 則稱“X函數確定Y”或“Y函數依賴于X”&#xff0c;記作X→Y。 X→Y&#x…

Java面試——線程池

1、類比介紹 假如有一個工廠&#xff0c;工廠里面有10個工人&#xff0c;每個工人同時只能做一件任務。 因此只要當10個工人中有工人是空閑的&#xff0c;來了任務就分配給空閑的工人做&#xff1b; 當10個工人都有任務在做時&#xff0c;如果還來了任務&#xff0c;就把任務進…

C#關鍵字的使用

params object[] 用于函數多參數的定義public static void Write(string format, params object[] arg);explicit 關鍵字用于聲明必須使用強制轉換來調用的用戶定義的類型轉換運算符。 例如&#xff0c;在下面的示例中&#xff0c;此運算符將名為 Fahrenheit 的類轉換為名為 Ce…

maven 中 pom.xml 配置文件標簽說明,dependencyManagement和dependencies區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 參考&#xff1a;http://zhaoshijie.iteye.com/blog/2094478http://blog.csdn.net/cpf2016/article/details/45674377 還有一篇轉載文章…

學成在線--17.我的課程

文章目錄一.需求分析二.API接口三.PageHelper1.PageHelper介紹2.添加依賴3.配置pageHelper四.Dao1.mapper 接口2.mapper.xml映射文件3.測試Dao五.Service六.Controller七.前端1.創建course_list.vue2.路由3.定義API方法4.前端視圖course_list.vue詳解1&#xff09;API調用--在視…

碼是數據系統中的基本概念。所謂碼就是能唯一標識實體的屬性或屬性集合&#xff0c;他是整個實體集的性質&#xff0c;而不是單個實體的性質。 主屬性與非主屬性 包含在任何一個候選碼中的屬性 &#xff0c;稱為主屬性&#xff08;Prime attribute&#xff09;。 不包含在任何…

關于C編程的一點感受

剛畢業的時候用了兩個多月的C語言編程&#xff0c;總的來說對它還是很有感受的&#xff0c;C是一個過程式語言&#xff0c;沒有像C,Java等OOP語言這樣那樣的一系列的規則和限制&#xff1b;它比較靈活&#xff0c;簡潔&#xff0c;高效&#xff1b;這些是給我的印象最深的。這是…

如何打造高效的多任務、高并發的網絡服務器系統?

同一個功能的軟件&#xff0c;不同的團隊&#xff0c;不同工程師去實現&#xff0c;肯定是千差萬別&#xff0c;甚至從根本上完全不同。所以軟件開發在未來很長時間內仍然是一項工匠的手工勞動&#xff0c;尤其像多任務&#xff0c;高并發&#xff0c;偏底層這種對實現技巧比較…