日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

事务以及@Transcational注解

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 事务以及@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事務管理實現方式之編程式事務與聲明式事務詳解

總結

以上是生活随笔為你收集整理的事务以及@Transcational注解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。