1. 程式人生 > >Spring(十一)Spring事物

Spring(十一)Spring事物

一個 簡單介紹 數據 數據庫操作 nag 原子性 pre spring pointcut

事務是訪問數據庫的一個操作序列,DB應用系統通過事務集來完成對數據的存取。

事務必須遵循4個原則,即常說的 ACID

A,Automicity,原子性,即事務要麽被全部執行,要麽被全部不執行。如果事務下的子事務全部提交成功,則所有數據庫操作被提交,否則,應進行事務回滾。

C,Consistency,一致性,即狀態轉換必須是由一種正確的狀態轉換到另外一種正確的狀態。

I,Isolation,隔離性,即相互間必須不能被影響。

D,Durabillity,持久性,即事務提交後將被永久保存,即便出現其他故障,事務處理結果也應得到保存。

事務的隔離級別

串行化,Serializable,一個事務在執行過程中完全看不到其他事務對數據庫所做的更新。

可重復讀,Repeatable Read,一個事務在執行過程中可以看到其他事務已經提交的記錄,但是不能看到其他事務對已有記錄的更新。

讀已提交數據,Read Commited,一個事務在執行過程中可以看到其他事務已經提交的記錄,而且能看到其他事務對已有記錄的更新。

讀未提交數據,Read UnCommited,一個事務在執行過程中可以看到其他事務沒有提交的記錄,而且能看到其他事務沒有提交的記錄的更新

簡單介紹完事務之後,我們用一個例子來具體使用一下事務:購買股票的案例

1.數據庫

  1.1股票表

  技術分享圖片

  1.2:賬戶余額表:

  技術分享圖片

2.實體類

  技術分享圖片

  2.1:account類

  技術分享圖片

  2.2:stock類

  技術分享圖片

3.dao 接口IAccountDao

  技術分享圖片

  IAccountDaoImpl:

  技術分享圖片

  IStockDao

技術分享圖片

  IStockDaoImpl:

  技術分享圖片

  接下來創建Service

  技術分享圖片

  技術分享圖片

  然後寫配置文件;

  技術分享圖片

技術分享圖片

  然後是註解事物:只需要改service裏就可以:

  

  @Transactional()
public void buyStock(int aid, int abalance, int sid, int scount) throws Exception {
//購買股票 買入 和拋出
boolean isBuy=true;//購買股票
accountDAO.updateAccount(aid,abalance,isBuy);
/* if (true){
throw new Exception("111");

}*/
stockDAO.updateStock(sid,scount,isBuy);

}

public IStockDAO getStockDAO() {
return stockDAO;
}

public void setStockDAO(IStockDAO stockDAO) {
this.stockDAO = stockDAO;
}

public IAccountDAO getAccountDAO() {
return accountDAO;
}

public void setAccountDAO(IAccountDAO accountDAO) {
this.accountDAO = accountDAO;
}
}

技術分享圖片

  

還有最後一種AspectJ Aop註解方式

 技術分享圖片

<!--方式三:AspectJ AOP 註解-->
<tx:advice id="stockAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="buy*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="StockException"/>

</tx:attributes>
</tx:advice>

<aop:config>
1.切點
<aop:pointcut id="mypointcut" expression="execution(* *..service.impl.*.*(..))"></aop:pointcut>
&3.顧問
<aop:advisor advice-ref="stockAdvice" pointcut-ref="mypointcut"></aop:advisor>
</aop:config>

最後就是測試類:
  

技術分享圖片



  

  

  

Spring(十一)Spring事物