5.6 聲明式事務(wù)

2022-07-11 10:20 更新

ActiveRecord 支持聲名式事務(wù),聲明式事務(wù)需要使用 ActiveRecordPlugin 提供的攔截器來(lái) 實(shí)現(xiàn),攔截器的配置方法見(jiàn) Interceptor 有關(guān)章節(jié)。以下代碼是聲明式事務(wù)示例:

// 本例僅為示例, 并未嚴(yán)格考慮賬戶狀態(tài)等業(yè)務(wù)邏輯
@Before(Tx.class)
public void trans_demo() {
// 獲取轉(zhuǎn)賬金額
Integer transAmount = getParaToInt("transAmount");
// 獲取轉(zhuǎn)出賬戶id
Integer fromAccountId = getParaToInt("fromAccountId");
// 獲取轉(zhuǎn)入賬戶id
Integer toAccountId = getParaToInt("toAccountId");
// 轉(zhuǎn)出操作
Db.update("update account set cash = cash - ? where id = ?", transAmount, fromAccountId);
// 轉(zhuǎn)入操作
Db.update("update account set cash = cash + ? where id = ?", transAmount, toAccountId);
}

以上代碼中,僅聲明了一個(gè) Tx 攔截器即為 action 添加了事務(wù)支持。除此之外 ActiveRecord 還配備了 TxByActionKeys、TxByActionKeyRegex、TxByMethods、TxByMethodRegex,分別 支持 actionKeys、actionKey 正則、actionMethods、actionMethod 正則聲明式事務(wù),以下是示例代碼:

public void configInterceptor(Interceptors me) { me.add(new TxByMethodRegex("(.*save.*|.*update.*)")); me.add(new TxByMethods("save", "update"));
 
me.add(new TxByActionKeyRegex("/trans.*")); me.add(new TxByActionKeys("/tx/save", "/tx/update"));

上例中的 TxByRegex 攔截器可通過(guò)傳入正則表達(dá)式對(duì) action 進(jìn)行攔截,當(dāng) actionKey 被正 則匹配上將開(kāi)啟事務(wù)。TxByActionKeys 可以對(duì)指定的 actionKey 進(jìn)行攔截并開(kāi)啟事務(wù), TxByMethods 可以對(duì)指定的 method 進(jìn)行攔截并開(kāi)啟事務(wù)。

注意MySql 數(shù)據(jù)庫(kù)表必須設(shè)置為 InnoDB 引擎時(shí)才支持事務(wù),MyISAM 并不支持事務(wù)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)