선언적 트랜잭션
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("계정 세트 현금 업데이트 = 현금 - ? where id = ?", transAmount, fromAccountId);
// 이체 작업
Db.update("계정 세트 현금 업데이트 = 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("계정 세트 현금 업데이트 = 현금 - ? where id = ?", transAmount, fromAccountId);
// 이체 작업
Db.update("계정 세트 현금 업데이트 = cash + ? where id = ?", transAmount, toAccountId);
}
코드 예입니다.
#🎜🎜 ##🎜🎜 #
#🎜 🎜##🎜 🎜#
public void configInterceptor(나를 인터셉터) { me.add(new TxByMethodRegex("(.*save.*|. *update.* )")); me.add(new TxByMethods("저장", "업데이트"));
me.add(new TxByActionKeyRegex("/trans.*")); me.add( new TxByActionKeys("/tx/save", "/tx/update"));
위 예제의 TxByRegex 인터셉터는 정규식과 일치하는 actionKey를 전달하여 작업을 가로챌 수 있습니다. 거래가 시작됩니다. TxByActionKeys는 지정된 actionKey를 가로채서 트랜잭션을 시작할 수 있고, TxByMethods는 지정된 메서드를 가로채서 트랜잭션을 시작할 수 있습니다.
Note
MyISAM이 트랜잭션을 지원하려면 MySql 데이터베이스 테이블을 InnoDB 엔진으로 설정해야 합니다.