SSM框架——以注解形式实现事务管理
上一篇博文《SSM三大框架整合具體教程》具體說了怎樣整合Spring、SpringMVC和MyBatis這三大框架。
可是沒有說到怎樣配置mybatis的事務管理,實現開發中,事務是不可缺少的。本篇作為對上一篇的補充,說明在SSM框架中怎樣使用注解的形式進行事務管理。
什么是事務?
在編寫業務的過程中,會須要進行事務處理,當須要運行多條插入語句時。假設前幾條成功。而最后一條失敗。那么我們須要回滾數據庫操作,保持數據的一致性和完整性,此時,就須要利用DB的事務處理。
事務是恢復和并發控制的基本單位。
簡單來說。所謂的事務,是一個操作序列。這些操作要么都運行。要么都不運行,它是一個不可切割的工作單位。
事務應該具有4個屬性:原子性、一致性、隔離性、持久性。
這四個屬性通常稱為ACID特性。
原子性(atomicity)。一個事務是一個不可切割的工作單位,事務中包含的諸操作要么都做,要么都不做。
一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到還有一個一致性狀態。
一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的運行不能被其它事務干擾。
即一個事務內部的操作及使用的數據對并發的其它事務是隔離的。并發運行的各個事務之間不能互相干擾。
持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其它操作或故障不應該對其有不論什么影響。
MyBatis集成Spring事務管理
在SSM框架中。使用的是Spring的事務管理機制。
Spring能夠使用編程式實現事務。聲明式實現事務以及注解式實現事務。
本文主要說一下怎樣使用注解式@Transanctional實現實現事務管理。
本文代碼樣例基于上一篇博文,具體代碼《SSM三大框架整合具體教程》中已經給出。簡單看下文件夾結構以及實體類:
1、配置spring-mybatis.xml文件
如要實現注解形式的事務管理。僅僅須要在配置文件里增加下面代碼就可以:
<!-- 開啟事務注解驅動 --> <tx:annotation-driven /> <!-- (事務管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
當然,假設此時xml文件報錯。那是因為沒有引入xmlns和schema導致的。無法識別文檔結構。引入頭文件就可以。下面是我的。依據自己須要引入:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
2、怎樣使用
在此用一個小樣例來測試事務管理是否成功配置。代碼基礎是SSM框架搭建里面的測試代碼。
我們如今測試的方法是:我要插入一個User對象的集合。假設此對象數量小于2,那么能夠成功插入。可是假設大于2。那么就拋出異常(事務處理必須拋出異常,僅僅有這樣Spring才幫助事務回滾)。這樣數據庫就會回滾,不插入不論什么數據。測試結果假設數據庫沒插入不論什么數據。那么表示事務處理配置成功,反正,失敗。
注意@Transactional僅僅能被應用到public方法上,對于其他非public的方法。假設標記了@Transactional也不會報錯,但方法沒有事務功能。
實體類、DAO接口。業務接口,以及業務實現都有。這個測試僅須要在業務層中加入一個方法,然后使用JUnit測試就可以。業務實現類中加入例如以下方法,注意注解@Transactional:
/**
* 事務處理必須拋出異常。Spring才會幫助事務回滾
* @param users
*/
@Transactional
@Override
public void insertUser(List<User> users) {
// TODO Auto-generated method stub
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測試會發現出現錯誤,這是由于方法中拋出了這個異常。實質上確實進行了事務管理,數據沒有插入,此時表示配置成功了;反之,假設去掉注解。那么前兩條數據會插入成功。然后后面會拋出異常。
(原文地址:http://blog.csdn.net/zhshulin)
總結
以上是生活随笔為你收集整理的SSM框架——以注解形式实现事务管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CRM, C4C和SAP Hybris的
- 下一篇: Cloud for Customer F