如何使用注解式@Transanctional實現實現事務管理。


在此用一個小例子來測試事務管理是否成功配置。代碼基礎是SSM框架搭建里面的測試代碼。我們現在測試的方法是:我要插入一個User對象的集合,如果此對象數量小於2,那么可以成功插入,但是如果大於2,那么就拋出異常(事務處理必須拋出異常,只有這樣Spring才幫助事務回滾),這樣數據庫就會回滾,不插入任何數據。測試結果如果數據庫沒插入任何數據,那么表示事務處理配置成功,反正,失敗。
    注意@Transactional只能被應用到public方法上,對於其它非public的方法,如果標記了@Transactional也不會報錯,但方法沒有事務功能。
 
實體類、DAO接口,業務接口,以及業務實現都有,這個測試僅需要在業務層中添加一個方法,然后使用JUnit測試即可,業務實現類中添加如下方法,注意注解@Transactional:
/** 
* 事務處理必須拋出異常,Spring才會幫助事務回滾 
* @param users 
*/  

@Transactional  
@Override  
public void insertUser(List<User> users) {  
    for (int i = 0; i < users.size(); i++) {  
        if(i<2){  
            this.userDao.insert(users.get(i));  
        } else {  
            throw new RuntimeException();  
        }  
    }  
} 

 

 
接下來在測試類中添加如下方法進行測試:
@Test  
public void testTransaction(){  
    List<User> users = new ArrayList<User>();  
    for(int i=1;i<5;i++){  
        User user = new User();  
        user.setAge(i);  
        user.setPassword(i+"111111");  
        user.setUserName("測試"+i);  
        users.add(user);  
    }  
    this.userService.insertUser(users);  
} 

 

注意:此時進行JUnit測試會發現出現錯誤,這是因為方法中拋出了這個異常。實質上確實進行了事務管理,數據沒有插入,此時表示配置成功了;反之,如果去掉注解,那么前兩條數據會插入成功,然后后面會拋出異常。    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM