宣言的トランザクション
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);
}
@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"));
me.add (new TxByActionKeyRegex("/trans.*")); me.add(new TxByActionKeys("/tx/save", "/tx/update"));
注: MySql データベース テーブルは、トランザクションをサポートするために InnoDB エンジンに設定する必要があります。MyISAM はトランザクションをサポートしません。