什么是事務?
事務是一組操作的集合,是一個不可分割的操作
事務會把所有的操作作為?個整體, ?起向數據庫提交或者是撤銷操作請求. 所以這組操作要么同時
成功, 要么同時失敗.
事務的操作
分為三步:
1. 開啟事start transaction/ begin (?組操作前開啟事務)
2. 提交事務: commit (這組操作全部成功, 提交事務)
3. 回滾事務: rollback (這組操作中間任何?個操作出現異常, 回滾事務)
?
Spring中事務的實現
Spring 中的事務操作分為兩類:
1. 編程式事務(?動寫代碼操作事務)
2. 聲明式事務(利?注解?動開啟和提交事務
聲明式事務
在需要事務的?法上添加 @Transactional 注解就可以實現了. ?需?動開啟事務和提交事務, 進入
?法時?動開啟事務, ?法執?完會?動提交事務, 如果中途發?了沒有處理的異常會?動回滾事務
@Transactional成功?
我們先建立一個數據庫表
當我們插入數據時,帶上@Transactional注解,如果成功就會自動提交,如果錯誤就會回滾
結果如下
這里很明顯,我們的數據已經插入成功了
@Transactional異常
當我們的數據異常的時候,就會觸發回滾
結果如下:
上部分代碼顯示插入成功,但是下面因為有錯誤就造成了回滾,沒有提示有commit
我們查看數據庫表,因為回滾,所以是沒有數據插入的
@Transactional捕獲異常
上述代碼中,如果有錯誤就會產生回滾,導致數據插入不進去,我們可以捕獲異常進行處理的方法,使數據插入成功
結果如下:
可以看到這次數據插入成功了,提示有commit
我們查看數據庫表,發現捕獲異常后就可以使數據插入成功
@Transactional捕獲異常怎么回滾
當我們捕獲異常,數據就會插入成功,但是我們在捕獲異常后,怎么再次回滾呢?
兩個方法:
1、重新拋出異常
當我們捕獲異常后不處理,再次拋一個異常出去后,就會產生回滾
2、手動回滾業務
當我們捕獲異常后,想要產生回滾,我們也可以手動回滾事務