1. 程式人生 > >事務為什麼加在service層而不加在dao層

事務為什麼加在service層而不加在dao層

事務註解 @Transactional一般的話都加在service層,問了一些剛入行的朋友為什麼,他們給的答案很模糊,所以自己去搜了下,下面是我的理解。

什麼是事務?

在資料庫中,所謂事務是指一組邏輯操作單元即一組sql語句。當這個單元中的一部分操作失敗,整個事務回滾,只有全部正確才完成提交。判斷事務是否配置成功的關鍵點在於出現異常時事務是否會回滾

事務四大特性

1. 原子性(Atomicity)
原子性是指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生

2. 一致性(Consistency)
事務必須使資料庫從一個一致性狀態變換到另外一個一致性狀態。(資料不被破壞

3.隔離性(Isolation)
事務的隔離性是指一個事務的執行不能被其他事務干擾.

4.永續性(Durability)
永續性是指一個事務一旦被提交,它對資料庫中資料的改變就是永久性的.即使系統重啟也不會丟失.

結合事務的特點,為什麼加在service層就很好解釋了。如果我們的事務註解@Transactional加在dao層,那麼只要與資料庫做增刪改,就要提交一次事務,如此做事務的特性就發揮不出來,尤其是事務的一致性,當出現併發問題是,使用者從資料庫查到的資料都會有所偏差。
一般的時候,我們的service層可以呼叫多個dao層,我們只需要在service層加一個事務註解@Transactional,這樣我們就可以一個事務處理多個請求,事務的特性也會充分的發揮出來。