聲明式事務
ActiveRecord 支援聲名式事務,宣告式事務需要使用 ActiveRecordPlugin 提供的攔截器來 實現,攔截器的設定方法請參閱 Interceptor 有關章節。以下程式碼為宣告式事務範例:
// 本範例僅為範例, 並未嚴格考慮帳戶狀態等業務邏輯
@Before(Tx.class)
public void trans_demo () {
// 取得轉帳金額
Integer transAmount = getParaToInt("transAmount");
// 取得轉出帳戶id
Integer fromAccountId = getParaToInt("fromAccountId");## // 取得轉入帳號id
Integer toAccountId = getParaToInt("toAccountId");
// 轉出操作
Db.update("update account set cash transAmount, fromAccountId);
// 轉入操作
Db.update("update account set cash = cash + ? where id = ?",# transAmountmount,o#ocount);
在以上程式碼中,只宣告了一個 Tx 攔截器即為 action 新增了事務支援。除此之外 ActiveRecord 還配備了TxByActionKeys、TxByActionKeyRegex、TxByMethods、TxByMethodRegex,分別支持 actionKeys、actionKey 正則、actionMethods、actionMethod 正則聲明式事務,以下是示例
代碼:@Before(Tx.class)
public void trans_demo () {
// 取得轉帳金額
Integer transAmount = getParaToInt("transAmount");
// 取得轉出帳戶id
Integer fromAccountId = getParaToInt("fromAccountId");## // 取得轉入帳號id
Integer toAccountId = getParaToInt("toAccountId");
// 轉出操作
Db.update("update account set cash transAmount, fromAccountId);
// 轉入操作
Db.update("update account set cash = cash + ? where id = ?",# transAmountmount,o#ocount);
在以上程式碼中,只宣告了一個 Tx 攔截器即為 action 新增了事務支援。除此之外 ActiveRecord 還配備了TxByActionKeys、TxByActionKeyRegex、TxByMethods、TxByMethodRegex,分別支持 actionKeys、actionKey 正則、actionMethods、actionMethod 正則聲明式事務,以下是示例
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"));注意
:MySql 資料庫表必須設定為 InnoDB 引擎時才支援事務,MyISAM 不支援交易。