锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
榪欎釜service鏂規(guī)硶閫氳繃xml閰嶇疆鐢眘pring浜嬪姟綆$悊鐨勩?br />涓や釜DAO綾諱腑鍒嗗埆鏈塖qlSessionTemplate綾誨瀷鐨勫睘鎬emplate錛屼嬌鐢↖OC鐨勬柟寮忔敞鍏ョ殑銆?br /> public void batchUpdate() {
String username="newname59";
List<Integer> idList=Arrays.asList(10000,10001);
userDao.batchUpdateUsername(username, idList);
testDao.testException();
userDao.batchUpdateUserage(55, idList);
testDao.testNormal();
}
褰搖serDao鍙?qiáng)testDao涓敞鍏ョ殑鏄疎xcutorType.Simple綾誨瀷鐨則emplate鏃訛紝鎵歸噺鏇存柊鐢ㄦ埛鍚嶇殑鎿嶄綔浼?xì)鍥炴粴銆?br />褰搖serDao鍙?qiáng)testDao涓敞鍏ョ殑鏄疎xcutorType.Batch綾誨瀷鐨則emplate鏃訛紝鎵歸噺鏇存柊鐢ㄦ埛鍚嶇殑鎿嶄綔鏈洖婊氥?/p>
緇忚繃媯鏌ユ暟鎹簱鏃ュ織錛屽彂鐜扮浜岀鎯呭喌鐨勬暟鎹簱鎵ц搴忓垪濡備笅錛?br />1 set autocommit = 0
2 rollback
3 update t_user set username="newname59" where id = '10000'
4 update t_user set username="newname59" where id = '10001'
5 set autocommit = 1
鏇存柊鎿嶄綔鍦ㄥ洖婊氫箣鍚庢墽琛岋紝鏁呭洖婊氬け璐ャ?/p>
璋冭瘯婧愪唬鐮佸彂鐜版湁濡備笅搴忓垪錛?br />AbstractPlatformTransactionManager
processRollback 錛堬級 --> triggerAfterCompletion() --> invokeAfterCompletion()
-->
TransactionSynchronizationUtils
invokeAfterCompletion()
-->
SqlSessionUtils
afterCompletion()
-->
DefaultSqlSession
close()
-->
BaseExecutor
close() --> rollback() --> flushStatement()
-->
BatchExecutor
doFlushStatements()
榪欐椂灝辨墽琛屼簡sql璇彞銆?br />
綆鍗曟潵璇達(dá)細(xì)鎶涘嚭寮傚父錛宻pring浜嬪姟鍥炴粴錛屾竻鐞嗚祫婧愬叧闂璼qlSession.
mybatis鍏抽棴sqlsession,鍏抽棴鍓嶅厛flushStatements錛屾墽琛屾湭鎵ц鐨剆ql璇彞錛岀劧鍚庡啀rollback.
浣嗘槸榪欎釜rollback鏂規(guī)硶閲屽垽鏂璫onnection鏄彈浜嬪姟綆$悊鐨勶紝灝變笉鎵ц浠諱綍鎿嶄綔銆?br />
public void rollback(boolean required) throws SQLException {
if (!closed) {
try {
clearLocalCache();
flushStatements();
} finally {
if (required) {
transaction.rollback();
}
}
}
}
public void rollback() throws SQLException {
if (!this.isConnectionTransactional) {
if (this.logger.isDebugEnabled()) {
this.logger.debug("Rolling back JDBC Connection [" + this.connection + "]");
}
this.connection.rollback();
}
}
浜屻佽В鍐沖姙娉曪細(xì)
1銆佸湪鑷繁鐨勫簲鐢ㄧ▼搴忎腑鍐欎釜鎷︽埅鍣ㄣ傚湪鎵ц瀹宔xecutor鐨刢lose()涔嬪悗錛岀敱榪欎釜鎷︽埅鍣ㄥ啀鎵ц涓閬峜onnection.rollback()錛屼絾浠庝唬鐮佺殑鍙鎬ф潵鐪嬶紝浼?xì)闈炲父鐨勫樊銆?br /> 2銆佷慨鏀筸ybatis鐨刡ug銆備慨鏀笲aseExecutor鐨剅ollback()
public void rollback(boolean required) throws SQLException {
if (!closed) {
try {
clearLocalCache();
if (!required) {
flushStatements();
}
} finally {
if (required) {
transaction.rollback();
}
}
}
}
涓嶇煡閬撳ぇ瀹舵湁娌℃湁紕板埌榪囩被浼肩殑闂錛屽張鏄氳繃浠涔堟柟妗堣В鍐崇殑鍛紵