?? a0f9381c5646001c1ed6e8bb434c180f
字號:
Spring 與hibernate的集成
1、把hibenate集成進來
* 將相關的包引入
* 創(chuàng)建實體類,映射文件和hibernate配置文件
2、把spring集成進來
* 將相關的包引入
* spring的配置文件
- 讓spring來創(chuàng)建SessionFactory
- 需要定義一個事務管理器
- 需要指定那些方法需要進行事務管理,以及這些方法上的事務管理特性是什么
3、編寫業(yè)務邏輯方法
* 繼承HibernateDaoSupport類,使用HibernateTemplate這個類來持久化數(shù)據(jù),
HibernateTemplate實際上就是session的封裝
* 或者,注入sessionFactory,并使用sessionFactory.getCurrentSession()來得到session接口,
使用session來持久化數(shù)據(jù)
* 默認回滾異常:RuntimeException
* 在編寫業(yè)務邏輯方法的時候,最好將異常向上拋出,直到呈現(xiàn)層處理
* Spring的事務管理是配添加的業(yè)務邏輯方法上面,而不要添加到DAO上
了解事務的幾種傳播特性
1. PROPAGATION_REQUIRED: 如果存在一個事務,則支持當前事務。如果沒有事務則開啟
2. PROPAGATION_SUPPORTS: 如果存在一個事務,支持當前事務。如果沒有事務,則非事務的執(zhí)行
3. PROPAGATION_MANDATORY: 如果已經(jīng)存在一個事務,支持當前事務。如果沒有一個活動的事務,則拋出異常。
4. PROPAGATION_REQUIRES_NEW: 總是開啟一個新的事務。如果一個事務已經(jīng)存在,則將這個存在的事務掛起。
5. PROPAGATION_NOT_SUPPORTED: 總是非事務地執(zhí)行,并掛起任何存在的事務。
6. PROPAGATION_NEVER: 總是非事務地執(zhí)行,如果存在一個活動事務,則拋出異常
7. PROPAGATION_NESTED:如果一個活動的事務存在,則運行在一個嵌套的事務中. 如果沒有活動事務,
則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執(zhí)行
Spring事務的隔離級別
1. ISOLATION_DEFAULT: 這是一個PlatfromTransactionManager默認的隔離級別,使用數(shù)據(jù)庫默認的事務隔離級別.
另外四個與JDBC的隔離級別相對應
2. ISOLATION_READ_UNCOMMITTED: 這是事務最低的隔離級別,它充許令外一個事務可以看到這個事務未提交的數(shù)據(jù)。
這種隔離級別會產(chǎn)生臟讀,不可重復讀和幻像讀。
3. ISOLATION_READ_COMMITTED: 保證一個事務修改的數(shù)據(jù)提交后才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的數(shù)據(jù)
4. ISOLATION_REPEATABLE_READ: 這種事務隔離級別可以防止臟讀,不可重復讀。但是可能出現(xiàn)幻像讀。
它除了保證一個事務不能讀取另一個事務未提交的數(shù)據(jù)外,還保證了避免下面的情況產(chǎn)生(不可重復讀)。
5. ISOLATION_SERIALIZABLE 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執(zhí)行。
除了防止臟讀,不可重復讀外,還避免了幻像讀。
什么是臟數(shù)據(jù),臟讀,不可重復讀,幻覺讀?
臟讀: 指當一個事務正在訪問數(shù)據(jù),并且對數(shù)據(jù)進行了修改,而這種修改還沒有提交到數(shù)據(jù)庫中,這時,
另外一個事務也訪問這個數(shù)據(jù),然后使用了這個數(shù)據(jù)。因為這個數(shù)據(jù)是還沒有提交的數(shù)據(jù), 那么另外一
個事務讀到的這個數(shù)據(jù)是臟數(shù)據(jù),依據(jù)臟數(shù)據(jù)所做的操作可能是不正確的。
不可重復讀: 指在一個事務內(nèi),多次讀同一數(shù)據(jù)。在這個事務還沒有結(jié)束時,另外一個事務也訪問該同一數(shù)據(jù)。
那么,在第一個事務中的兩次讀數(shù)據(jù)之間,由于第二個事務的修改,那么第一個事務兩次讀到的數(shù)據(jù)
可能是不一樣的。這樣就發(fā)生了在一個事務內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱為是不可重復讀。
幻覺讀: 指當事務不是獨立執(zhí)行時發(fā)生的一種現(xiàn)象,例如第一個事務對一個表中的數(shù)據(jù)進行了修改,這種修改涉及
到表中的全部數(shù)據(jù)行。同時,第二個事務也修改這個表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,
以后就會發(fā)生操作第一個事務的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -