學(xué)習(xí)Spring的事務(wù)管理(二)
用代碼控制實(shí)現(xiàn)事物管理的另一種方式,就是通過(guò)使用TransactionTemplate模板類(lèi),TransactionTemplate封裝了事務(wù)管理的功能,包括異常時(shí)的事務(wù)回滾,以及操作成功后的事務(wù)提交。和JdbcTemplate一樣,它使得我們無(wú)需在瑣碎的try/catch/finally代碼中徘徊---也就是為我們省去了部分事務(wù)提交、回滾代碼。
將上面的用戶(hù)信息插入方法修改成下面這樣:
TransactionTemplate類(lèi)的構(gòu)造器需要一個(gè)TransactionCallback接口類(lèi)型的參數(shù),而抽象類(lèi)TransactionCallbackWithoutResult實(shí)現(xiàn)了TransactionCallback接口,抽象類(lèi)TransactionCallbackWithoutResult中有一個(gè)TransactionCallbackWithoutResult()方法,該方法以TransactionStatus 為參數(shù)。所以就有了下面的用內(nèi)部類(lèi)的實(shí)現(xiàn)方式。
public boolean doUpdateUserInfo(UserInfoVO oneUserInfo)
{
//定義兩個(gè)sql插入語(yǔ)句
String sql = "update userinfo set userPassword=? where userName=?";
String sql2 = "update userinfo1 set userPassword=? where userName=?";
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(new TransactionCallbackWithoutResult()
{
public void doInTransactionWithoutResult(TransactionStatus status)
{
this.jdbcTemplate.update(sql, new Object[]
{oneUserInfo.getUserName(),
oneUserInfo.getUserPassword()});
this.jdbcTemplate.update(sql2, new Object[]
{oneUserInfo.getUserName(),
oneUserInfo.getUserPassword()});
}
});
return true;
}
這種方式,代碼量少,少了try/catch/finally語(yǔ)句,全部被封裝在了TransactionTemplate類(lèi)里面,以?xún)?nèi)部類(lèi)方式實(shí)現(xiàn)可能降低了代碼的可讀性。
posted on 2008-08-26 22:06 豬 閱讀(119) 評(píng)論(0) 編輯 收藏