W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
ActiveRecord 支持聲名式事務(wù),聲明式事務(wù)需要使用 ActiveRecordPlugin 提供的攔截器來 實(shí)現(xià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 攔截器可通過傳入正則表達(dá)式對(duì) action 進(jìn)行攔截,當(dāng) actionKey 被正 則匹配上將開啟事務(wù)。TxByActionKeys 可以對(duì)指定的 actionKey 進(jìn)行攔截并開啟事務(wù), TxByMethods 可以對(duì)指定的 method 進(jìn)行攔截并開啟事務(wù)。
注意:MySql 數(shù)據(jù)庫(kù)表必須設(shè)置為 InnoDB 引擎時(shí)才支持事務(wù),MyISAM 并不支持事務(wù)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: