一、事務:
事務:單個邏輯工元執行的一系列邏輯工作單元執行的一系列操
1)事務特徵:
- 原子性 指事務包含的所有操作要麼全部成功,要麼全部失敗回滾
- 一致性 指事務執行的前後,數據的完整性保持一致
- 隔離性 指一個事務執行的過程中,不應該受到其他事務的干擾
- 持久性 一個事務執行完成後,數據就持久的保存在數據庫中
2)事務處理,不考慮隔離性引發的安全問題
- 髒讀 一個事務讀取到另一個事務未提交的數據
- 不可重複讀 一個事務讀到另一事務已經提交的update數據,導致在前一個事務多次查詢的結果不一致
- 虛度 一個事務讀到另一個事務已經提交的insert數據,導致在前一個事務多次查詢結果不一致
3)事務的隔離性,設置它可避免上述情況
- Serializable (串行化):可避免髒讀、不可重複讀、幻讀的發生。
- Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。
- Read committed (讀已提交):可避免髒讀的發生。
- Read uncommitted (讀未提交):最低級別,任何情況都無法保證。
4)hibernate設置事務個隔離級別,進行事務處理
<!--當前線程綁定session-->
<property name="hibernate.current_session_context_class">thread</property>
<!--設置事務的隔離級別-->
<property name="hibernate.connection.isolation">4</property>
設置事務隔離級別.取值爲 1、2、4、8
1 : READ_UNCOMMITED 讀取未提交,它引發所有的隔離問題
2 : READ_COMMITTED 讀取已提交,阻止髒讀,可能發生不可重複讀與虛讀
4 : REPEATABLE_READ 重複讀,阻止髒讀,不可重複讀,可能發生虛讀
8 : SERIALIZABLE 串行化,解決所有問題,不允許兩個事務,同時操作一個目標數據。(效率低)
ORACLE 默認的事務隔離級別是READ_COMMITTED
MYSQL 默認的事務隔離級別是REPEATABLE_READ
<property name="hibernate.connection.isolation">4</property>
二、連接池介紹
https://blog.csdn.net/crankz/article/details/82874158
C3P0:是一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate 一起發佈,包括了實現jdbc3和jdbc2擴展規範說明的Connection 和Statement 池的DataSources 對象。
<!-- 自己 配置C3P0連接池 -->
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!--在連接池中可用的數據庫連接的最少數目 -->
<property name="c3p0.min_size">5</property>
<!--在連接池中所有數據庫連接的最大數目 -->
<property name="c3p0.max_size">20</property>
<!--設定數據庫連接的過期時間,以秒爲單位,
如果連接池中的某個數據庫連接處於空閒狀態的時間超過了timeout時間,就會從連接池中清除 -->
<property name="c3p0.timeout">120</property>
<!--每3000秒檢查所有連接池中的空閒連接 以秒爲單位-->
<property name="c3p0.idle_test_period">3000</property>