SSM框架——以註解形式實現事務管理

    上一篇博文《SSM三大框架整合詳細教程》詳細說了如何整合Spring、SpringMVC和MyBatis這三大框架。可是沒有說到如何配置mybatis的事務管理,在編寫業務的過程當中,會須要進行事務處理,當須要執行多條插入語句時,若是前幾條成功,而最後一條失敗,那麼咱們須要回滾數據庫操做,保持數據的一致性和完整性,此時,就須要利用DB的事務處理。事務是恢復和併發控制的基本單位。html

 


        簡單來講,所謂的事務,是一個操做序列,這些操做要麼都執行,要麼都不執行,它是一個不可分割的工做單位。
java


事務應該具備4個屬性:原子性、一致性、隔離性、持久性。這四個屬性一般稱爲ACID特性。
spring


       原子性(atomicity)。一個事務是一個不可分割的工做單位,事務中包括的諸操做要麼都作,要麼都不作。
數據庫


       一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另外一個一致性狀態。一致性與原子性是密切相關的。
編程


       隔離性(isolation)。一個事務的執行不能被其餘事務干擾。即一個事務內部的操做及使用的數據對併發的其餘事務是隔離的,併發執行的各個事務之間不能互相干擾。
spring-mvc


       持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其餘操做或故障不該該對其有任何影響。
mybatis


MyBatis集成Spring事務管理

           在SSM框架中,使用的是Spring的事務管理機制。Spring可使用編程式實現事務,聲明式實現事務以及註解式實現事務。本文主要說一下如何使用註解式@Transanctional實現實現事務管理。併發


本文代碼例子基於上一篇博文,具體代碼《SSM三大框架整合詳細教程》中已經給出。簡單看下目錄結構以及實體類:mvc



一、配置spring-mybatis.xml文件框架

       

         如要實現註解形式的事務管理,只須要在配置文件中加入如下代碼便可:


  1. <!-- 開啓事務註解驅動 -->  
  2.     <tx:annotation-driven />  
  3.     <!-- (事務管理)transaction manager, use JtaTransactionManager for global tx -->  
  4.     <bean id="transactionManager"  
  5.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  6.         <property name="dataSource" ref="dataSource" />  
  7.     </bean>  


           

            固然,若是此時xml文件報錯,那是因爲沒有引入xmlns和schema致使的,沒法識別文檔結構。引入頭文件便可,如下是個人,根據本身須要引入:


  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  3.     xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  7.                         http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    
  8.                         http://www.springframework.org/schema/context    
  9.                         http://www.springframework.org/schema/context/spring-context-3.1.xsd  
  10.                         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd    
  11.                         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd    
  12.                         http://www.springframework.org/schema/mvc    
  13.                         http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  



在此用一個小例子來測試事務管理是否成功配置。代碼基礎是SSM框架搭建裏面的測試代碼。咱們如今注意@Transactional只能被應用到public方法上,對於其它非public的方法,若是標記了@Transactional也不會報錯,但方法沒有事務功能。 

 


        實體類、DAO接口,業務接口,以及業務實現都有,這個測試在CODE上查看代碼片派生到個人代碼片

  1. /** 
  2.      * 事務處理必須拋出異常,Spring纔會幫助事務回滾 
  3.      * @param users 
  4.      */  
  5.       
  6.     @Transactional  
  7.     @Override  
  8.     public void insertUser(List<User> users) {  
  9.         // TODO Auto-generated method stub  
  10.         for (int i = 0; i < users.size(); i++) {  
  11.             if(i<2){  
  12.                 this.userDao.insert(users.get(i));  
  13.             }  
  14.             else {  
  15.                 throw new RuntimeException();  
  16.             }  
  17.         }  
  18.     }  


接下來在測試類中添加以下方法進行測試:


  1. @Test  
  2.     public void testTransaction(){  
  3.         List<User> users = new ArrayList<User>();  
  4.         for(int i=1;i<5;i++){  
  5.             User user = new User();  
  6.             user.setAge(i);  
  7.             user.setPassword(i+"111111");  
  8.             user.setUserName("測試"+i);  
  9.             users.add(user);  
  10.         }  
  11.         this.userService.insertUser(users);  
  12.     }  



         (原文地址:http://blog.csdn.net/zhshulin

相關文章
相關標籤/搜索