------------吾亦無他,唯手熟爾,謙卑若愚,好學若飢-------------
本篇博客會詳細講述Spring中的事務,會展開來用語言解釋,用於了解概念和准備面試
事務的概念:
一個或者一組sql語句來完成一個功能!要么都執行,要么都不執行
事務具有的四個特性: ACID特性!
01.原子性:一個事物都是一個不可分割的單位!所有的操作 要么都執行,要么都不執行!
02.一致性:事務必須是數據庫從一個一致性的狀態到達另一個一致性的狀態!
03.隔離性:一個事務的執行不會被其他的事務干擾!事務之間相互獨立!
04.持久性:事務一旦被提交!這個操作對數據庫來說是永久性的!
Spring的事務管理:
事務本事是數據庫中的概念! 按理說應該在數據訪問層(dao)!
絕大多數的情況下,我們是把事務 提升到 業務邏輯層!
01.使用spring的事務代理工廠 來 管理事務!
02.使用spring的注解 來 管理事務! 常用
03.使用AspectJ的AOP配置 來 管理事務! 常用
需要掌握的兩個屬性名:
isolation:事務的隔離級別!
01.default:采用數據庫默認的事務隔離級別
001.mysql ---》repeatable-read
002.oracle---》read_committed
02. repeatable-read:可重復讀取!解決了臟讀,不可重復讀,沒解決幻讀!
03. read_committed:讀已提交! 解決了臟讀,沒解決不可重復讀,幻讀!
04. read_uncommitted:讀未提交!什么都沒有解決!
05. serializable:串行化!級別最高!效率最低!不存在並發的問題!
propagation: 事務的傳播行為:一共7中方式!
01.required:是spring默認的事務傳播行為!
指定的方法必須在事務中執行!如果沒有事務,則會自動創建一個事務!
02.supports:有事務就在事務環境下執行,沒有事務就直接執行!
03.mandatory:
指定的方法必須在事務中執行!如果沒有事務,則拋出異常!
04.requires_new:總是新創建一個事務!
如果當前方法存在事務,則把當前的事務掛起,直到新創建的事務執行完畢后執行!
05.not_supported:指定的方法不能在事務中執行!如果當前方法存在事務,則把當前的事務掛起!
06.never:指定的方法不能在事務中執行!如果當前方法存在事務,則拋出異常!
07.nested:指定的方法必須在事務內執行!
如果執行的方法沒有事務,則會創建一個事務!
如果執行的方法沒有事務,則會嵌套執行!
timeout_default:定義了事務默認的超時時間!
Spring事務管理的接口:PlatformTransactionManager
常用的兩個實現類:
01.使用jdbc和MyBatis時 使用DataSourceTrancationManager
02.使用hibernate時 使用HibernateTrancationManager
Spring事務回滾的方式:
默認的回滾方式--》發生運行時異常回滾!發送受查異常時提交!
受查異常肯定需要我們手動的設置回滾方式!
運行時異常嚴重!一旦發生,JVM中止執行!
實現自定義異常類!RuntimeException --> Exception ---> Throwable
