spring事務管理

1.事務的概念

事務是一組操作的執行單元,相對於數據庫操作來講,事務管理的是一組SQL指令,比如增加,修改,刪除等,事務的一致性,要求,這個事務內的操作必須全部執行成功,如果在此過程種出現了差錯,比如有一條SQL語句沒有執行成功,那麼這一組操作都將全部回滾

 

僅用四個詞解釋事務(ACID)

atomic(原子性):要麼都發生,要麼都不發生。

consistent(一致性):數據應該不被破壞。

Isolate(隔離性):用戶間操作不相混淆

Durable(持久性):永久保存,例如保存到數據庫中等

 

2.數據庫系統提供了四種事務隔離級別

 

隔離級別

含義

DEFAULT

使用後端數據庫默認的隔離級別(spring中的的選擇項)

READ_UNCOMMITED

允許你讀取還未提交的改變了的數據。可能導致髒、幻、不可重複讀

READ_COMMITTED

允許在併發事務已經提交後讀取。可防止髒讀,但幻讀和 不可重複讀仍可發生

REPEATABLE_READ

對相同字段的多次讀取是一致的,除非數據被事務本身改變。可防止髒、不可重複讀,但幻讀仍可能發生。

SERIALIZABLE

完全服從ACID的隔離級別,確保不發生髒、幻、不可重複讀。這在所有的隔離級別中是最慢的,它是典型的通過完全鎖定在事務中涉及的數據表來完成的。

髒讀:一個事務讀取了另一個事務改寫但還未提交的數據,如果這些數據被回滾,則讀到的數據是無效的。

不可重複讀:在同一事務中,多次讀取同一數據返回的結果有所不同。換句話說就是,後續讀取可以讀到另一事務已提交的更新數據。相反,“可重複讀”在同一事務中多次讀取數據時,能夠保證所讀數據一樣,也就是,後續讀取不能讀到另一事務已提交的更新數據。

幻讀:一個事務讀取了幾行記錄後,另一個事務插入一些記錄,幻讀就發生了。再後來的查詢中,第一個事務就會發現有些原來沒有的記錄。

 

3.採用註解的方式配置事務

<bean id=" txManager "

class="org.springframework.orm.hibernate4.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory" />

</bean>

 

<!– 採用@Transactional註解方式使用事務 -->

<tx:annotation-driven transaction-manager="txManager"/>

 

@Service

@Transactional

public class PersonService implements PersonService {

}

 

具體操作詳見

https://download.csdn.net/download/weixin_42756687/10581833

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章