Opérations déclaratives


ActiveRecord prend en charge les transactions déclaratives. Les transactions déclaratives doivent être implémentées à l'aide de l'intercepteur fourni par ActiveRecordPlugin. Pour la méthode de configuration de l'intercepteur, consultez les chapitres pertinents d'Interceptor. Le code suivant est un exemple de transaction déclarative :

// Cet exemple n'est qu'un exemple, et la logique métier telle que le statut du compte n'est pas strictement prise en compte
@Before(Tx.class)
public void trans_demo() {
/ / Obtenez le montant du transfert
Integer transAmount = getParaToInt("transAmount");
// Obtenez l'identifiant du compte de transfert
Integer fromAccountId = getParaToInt("fromAccountId");
// Obtenez l'identifiant du compte de transfert
Integer toAccountId = getParaToInt(" toAccountId");
/ / Opération de transfert
Db.update("mettre à jour le compte set cash = cash - ?where id = ?", transAmount, fromAccountId);
// Opération de transfert
Db.update("mettre à jour le compte set cash = cash + ? où id = ?", transAmount, toAccountId);
}

Dans le code ci-dessus, un seul intercepteur Tx est déclaré pour ajouter la prise en charge des transactions à l'action. De plus, ActiveRecord est également équipé de TxByActionKeys, TxByActionKeyRegex, TxByMethods et TxByMethodRegex, prenant respectivement en charge les transactions déclaratives actionKeys, actionKey Regular, actionMethods et actionMethod. Voici un exemple de code :

public void configInter. ceptor(Intercepteurs moi) { 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"));



Exemple ci-dessus L'intercepteur TxByRegex peut intercepter l'action en transmettant une expression régulière Lorsque l'actionKey correspond à l'expression régulière, la transaction sera démarrée. TxByActionKeys peut intercepter l'actionKey spécifié et démarrer la transaction, et TxByMethods peut intercepter la méthode spécifiée et démarrer la transaction.

Remarque : La table de base de données MySql doit être définie sur le moteur InnoDB pour prendre en charge les transactions. MyISAM ne prend pas en charge les transactions.