銆銆浠DBC DataSource鐐轟緥錛屾垜鍊戝彲浠ヤ嬌鐢╫rg.springframework.jdbc.datasource.DataSourceTransactionManager錛圥latformTransactionManager鐨勪竴鍊嬪鐝撅級(jí)浣滅偤鎴戝戠殑浜嬪嫏綆$悊鍝★紝鎴戝戝湪Bean瀹氱京妾斾腑閰嶇疆錛屼甫灝嘍ataSource娉ㄥ叆緄﹀畠錛屼緥濡傦細(xì)
銆浠g⒓:
銆銆鎴戝戝畾緹╀簡(jiǎn)涓鍊嬬啊鍠殑DAO鐗╀歡錛屽皣transactionManager鑸嘾ataSource娉ㄥ叆鑷沖叾涓紝UserDAO濡備笅錛?
銆浠g⒓:
銆銆insertUser()鏂規(guī)硶涓紝鎴戝戝皣瀵︾従User鐨勫瓨鍎詫紝涓︿嬌鐢ㄤ簨鍕欑鐞嗭紝棣栧厛鐪嬬湅鐩存帴浣跨敤trransactionManager濡備綍瀵︾従浜嬪嫏錛屾垜鍊戦渶瑕佷簨鍕欏畾緹╋紝浣滅偤紺虹瘎錛岄欓倞鍏堜嬌鐢⊿pring闋愯ō鐨勫嵆鍙細(xì)DefaultTransactionDefinition錛屾垜鍊戠殑紼嬪紡紺虹瘎濡備笅錛?
銆浠g⒓:
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def);
try {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update("INSERT INTO USER VALUES('Spring008', 'caterpillar', 'M', 29)");
jdbcTemplate.update("INSERT INTO USER VALUES('Spring009', 'momor', 'F', 26)");
jdbcTemplate.update("INSERT INTO USER VALUES('Spring010, 'beckyday', 'F', 35)");
} catch (DataAccessException ex) {
transactionManager.rollback(status); // 涔熷彲浠ュ煼琛宻tatus.setRollbackOnly();
throw ex;
}
transactionManager.commit(status);
銆銆鍦ㄤ笂闈㈢殑紼嬪紡涓紝鎴戝戠収甯稿煼琛屾垜鍊戠殑SQL錛堢偤浜?jiǎn)绨″寲锛屾垜鍊戠洿鎺ュ皣璩囨枡瀵湪SQL涓簡(jiǎn)錛岃屼笉鏄緸User鐗╀歡涓彇寰楋級(jí)錛屾敞鎰忓埌鎴戝戞晠鎰忓湪鏈寰屼竴琛孲QL涓璖pring010灝戝浜?jiǎn)涓鍊?' 錛岄欎嬌寰桽QL鍙ュ瓙涓嶅悎瑾炴硶錛屽洜鑰岄犳垚DataAccessException錛堝皝瑁濅簡(jiǎn)SQLException錛夛紝閫欏嬩緥澶栬catch鍗濉婃崟鎹夛紝鍥犺屽煼琛宺ollback()鍙栨秷涔嬪緦鐨凷QL錛屽鏋滄矑鏈夌櫦鐢熼尟瑾わ紝鍓囨渶寰屾垜鍊戜嬌鐢╟ommit()渚嗘彁浜ゆ搷浣溿?
銆銆鍙︿竴鍊嬬啊渚跨殑鏂規(guī)硶鏄嬌鐢═ransactionTemplate錛屽畠?yōu)畞瑁濅簡(jiǎn)涓婇潰鐨勪簨鍕檵箒绋嬪Q岄忛亷callback渚嗗畬鎴愪簨鍕欙紝渚嬪錛?
銆浠g⒓:
銆銆閫欓倞浣跨敤TransactionCallbackWithoutResult錛屼甫鍦ㄥ畠鐨刣oInTransactionWithoutResult()涓茶SQL鎿嶄綔錛屽鏋滃煼琛屼腑鐧肩敓渚嬪錛屽墖涔嬪墠鎵鏈夌殑鎿嶄綔鍙栨秷錛屽惁鍓囨渶寰岃嚜鍕曟彁浜ゆ搷浣溿傚鏋滄搷浣滃畬鎴愭?zhèn)ㄦ儗櫐仒q斿洖緄愭灉鐗╀歡錛屽墖鍙互浣跨敤TransactionCallback錛屼甫瀵︾従鍏禿oInTransaction()錛屼緥濡傦細(xì)
銆浠g⒓:
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
Object result = transactionTemplate.execute(
new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
// 浣滀竴浜涙搷浣?br /> // 鏀墮泦鐐虹祼鏋滅墿浠?nbsp;resultObject
return resultObject;
});