宣言的トランザクション


ActiveRecord は宣言型トランザクションをサポートしています。宣言型トランザクションは ActiveRecordPlugin が提供するインターセプターを使用して実装する必要があります。インターセプターの設定方法については、インターセプターの関連章を参照してください。以下のコードは宣言型トランザクションの例です:

// この例は単なる例であり、アカウントステータスなどのビジネスロジックは厳密には考慮されていません
@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 setCash =Cash - ? where id = ?", transAmount, fromAccountId);
// 転送操作
Db.update("update account setCash = Cash + ? where id = ?", transAmount, toAccountId);
}

上記のコードでは、トランザクション サポートをアクションに追加するために 1 つの Tx インターセプターのみが宣言されています。さらに、ActiveRecord には、TxByActionKeys、TxByActionKeyRegex、TxByMethods、および TxByMethodRegex も装備されており、それぞれ、actionKeys、actionKey Regular、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"));



上記の例 TxByRegex インターセプターは、正規表現を渡すことでアクションをインターセプトできます。actionKey が正規表現と一致すると、トランザクションが開始されます。 TxByActionKeys は指定された actionKey をインターセプトしてトランザクションを開始でき、TxByMethods は指定されたメソッドをインターセプトしてトランザクションを開始できます。

: MySql データベース テーブルは、トランザクションをサポートするために InnoDB エンジンに設定する必要があります。MyISAM はトランザクションをサポートしません。