Java MVC 事務管理

2021-08-08 12:43:59 字數 3614 閱讀 7420

事務指的是邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗。

***2.1手動開啟事務

start transaction; —開啟事務

多條sql;

commit、rollback;

***2.2設定乙個自動提交引數

show variable like』%commit%』 — 檢視與commit相關的引數

set autocommit = 0; –將autocommit引數設定為off;

jdbc的事務管理的api:

- setautocommit()

- commit()

- rollback()

【步驟一】:建立乙個頁面

【步驟二】:匯入jdbc相關的jar包和工具類

【步驟三】:建立包結構

【步驟四】:提交到servlet -》 service -》 dao

【步驟五】:頁面跳轉。

*兩種方式:

在業務層獲得connection通過引數傳遞給dao,dbutils進行事務管理。

在業務層獲得connection,將這個連線板定在當前的 執行緒中。在dao中獲得連線的話,可以從當前的執行緒中獲取。

threadlocal:hibernate框架。

沒有事務管理:queryrunner(database ds)

query、update

有事務管理:queryrunner()

query、update

6.1事務特性:
原子性:強調事務的不可分割

一致性:強調事務的執行的強,資料的完整性要保持一致。

隔離性:乙個事務的執行,不應該受到其他事務的干擾。

永續性:事務一旦結束(提交、回滾),資料就持久保持到資料庫。

6.2 如果不考事務的隔離性,引發一些安全問題:
一類讀問題:

- 髒讀:乙個事務讀到了另乙個事務沒有提交的資料。

- 不可重複讀:乙個事務讀到了另乙個事物已經update的資料,導致當前的事務中多次查詢結果不一致。

- 虛讀、幻讀:乙個事務讀到另乙個事務一經提交的insert資料,導致在當前的事務中多次查詢結果不一致。

一類寫問題:

- 引發兩類丟失更新;

6.3解決引發的讀問題
設定事務的隔離級別:

- read uncommitted :未提交讀,髒讀,不可重複讀,虛讀都可能發生。

- read committed :已提交讀,避免髒讀,但是不可重複讀和虛讀可能發生。

- repeated read:可重複讀,避免髒讀,不可重複讀,但是虛讀可能會發生。

- serializable:穿行讀,避免髒讀,不可重複讀,虛讀的發生,

mysql隔離級別:repeatable read oracle隔離級別:read committed

檢視mysql的隔離級別: select @@tx_isolation;

7演示髒讀的發生:
分別開啟兩個視窗:a,b

分別檢視兩個視窗的隔離級別:select @@tx_isolation;

設定a視窗的隔離級別為read uncommitted。****set session transaction isolation level read uncommitted;

分別在兩個視窗中開啟事務:start transaction;

在b視窗中完成轉賬的操作:

update account set money = money + 50 where name = 『tommy』;

update account set money = money -50 where name = 『hans』;

在a視窗中進行查詢:

a視窗錢已到賬。

在b視窗中rollback,錢又返回了。—-a事務讀到了b事務還沒有提交的資料。

7.1演示避免髒讀,不可重複讀
分別開啟兩個視窗:a,b

分別檢視兩個視窗的隔離級別:select @@tx_isolation;

設定a視窗的隔離級別為read uncommitted。****set session transaction isolation level read committed;

分別在兩個視窗中開始事務:

start transaction

在b視窗中完成轉賬的操作:

update account set money = money + 50 where name = 『tommy』;

update account set money = money -50 where name = 『hans』;

在a建立口中進行查詢:—- 避免了髒讀;

在b視窗中提交了事務;

commit();

在a視窗在次查詢:—轉賬成功(不可重複讀:乙個事務讀到另乙個事務中已經提交的update的資料,導致多次查詢結果不一致)

7.2演示避免不可重複讀:
分別開啟兩個視窗:a,b

分別檢視兩個視窗的隔離級別:select @@tx_isolation;

設定a視窗的隔離級別為read uncommitted。****set session transaction isolation level repeatable read;

分別在兩個視窗中開啟事務。

update account set money = money + 50 where name = 『tommy』;

update account set money = money -50 where name = 『hans』;

在a視窗中進行查詢:—轉賬沒有成功

在b視窗提交事務:

在a視窗中在次查詢:—沒有變化,轉賬沒有成功:避免了不可重複讀。

在a視窗中commit;

在a視窗中再次查詢。

7.3避免虛讀:
分別開啟兩個視窗:a,b

分別檢視兩個視窗的隔離級別:select @@tx_isolation;

設定a視窗的隔離級別為read uncommitted。****set session transaction isolation level serializable;

在a,b兩個視窗中分別開啟事務

在b視窗中完成insert操作:

insert into account(id,name,money) values(7,』shally』,5000);

在a建立中進行查詢的操作

a卡住,等待狀態; — 沒查到任何結果,等待b提交。

在b中提交,a中就顯示出來了。

序列,必須的等乙個事務成功後,在進行下一步。

ee開發的三層結構:

ee的三層架構和mvc是不同的時候由不同的人、組織提出的開發方案。

Spring事務管理

spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...

spring事務管理

一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...

Spring AOP 事務管理

首先需要配置乙個 bean 稱之為事務管理器。有datasourcetransactionmanager hibernatetransactionmanager等。然後用tx advice標籤配置事務。tx即是transaction的簡寫。定義事務屬性 傳播 隔離級別 讀寫 超時 異常。最後用 ao...