日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

SSM框架——以注解形式实现事务管理

發(fā)布時間:2023/12/19 综合教程 45 生活家
生活随笔 收集整理的這篇文章主要介紹了 SSM框架——以注解形式实现事务管理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上一篇博文《SSM三大框架整合具體教程》具體說了怎樣整合Spring、SpringMVC和MyBatis這三大框架。

可是沒有說到怎樣配置mybatis的事務(wù)管理,實現(xiàn)開發(fā)中,事務(wù)是不可缺少的。本篇作為對上一篇的補充,說明在SSM框架中怎樣使用注解的形式進行事務(wù)管理。

什么是事務(wù)?

在編寫業(yè)務(wù)的過程中,會須要進行事務(wù)處理,當(dāng)須要運行多條插入語句時。假設(shè)前幾條成功。而最后一條失敗。那么我們須要回滾數(shù)據(jù)庫操作,保持?jǐn)?shù)據(jù)的一致性和完整性,此時,就須要利用DB的事務(wù)處理。

事務(wù)是恢復(fù)和并發(fā)控制的基本單位。


簡單來說。所謂的事務(wù),是一個操作序列。這些操作要么都運行。要么都不運行,它是一個不可切割的工作單位。


事務(wù)應(yīng)該具有4個屬性:原子性、一致性、隔離性、持久性。

這四個屬性通常稱為ACID特性。


原子性(atomicity)。一個事務(wù)是一個不可切割的工作單位,事務(wù)中包含的諸操作要么都做,要么都不做。


一致性(consistency)。事務(wù)必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到還有一個一致性狀態(tài)。

一致性與原子性是密切相關(guān)的。


隔離性(isolation)。一個事務(wù)的運行不能被其它事務(wù)干擾。

即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其它事務(wù)是隔離的。并發(fā)運行的各個事務(wù)之間不能互相干擾。


持久性(durability)。持續(xù)性也稱永久性(permanence),指一個事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來的其它操作或故障不應(yīng)該對其有不論什么影響。

MyBatis集成Spring事務(wù)管理

在SSM框架中。使用的是Spring的事務(wù)管理機制。

Spring能夠使用編程式實現(xiàn)事務(wù)。聲明式實現(xiàn)事務(wù)以及注解式實現(xiàn)事務(wù)。

本文主要說一下怎樣使用注解式@Transanctional實現(xiàn)實現(xiàn)事務(wù)管理。


本文代碼樣例基于上一篇博文,具體代碼《SSM三大框架整合具體教程》中已經(jīng)給出。簡單看下文件夾結(jié)構(gòu)以及實體類:

1、配置spring-mybatis.xml文件

如要實現(xiàn)注解形式的事務(wù)管理。僅僅須要在配置文件里增加下面代碼就可以:


<!-- 開啟事務(wù)注解驅(qū)動 -->
	<tx:annotation-driven />
	<!-- (事務(wù)管理)transaction manager, use JtaTransactionManager for global tx -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

當(dāng)然,假設(shè)此時xml文件報錯。那是因為沒有引入xmlns和schema導(dǎo)致的。無法識別文檔結(jié)構(gòu)。引入頭文件就可以。下面是我的。依據(jù)自己須要引入:


<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、怎樣使用

在此用一個小樣例來測試事務(wù)管理是否成功配置。代碼基礎(chǔ)是SSM框架搭建里面的測試代碼。

我們?nèi)缃駵y試的方法是:我要插入一個User對象的集合。假設(shè)此對象數(shù)量小于2,那么能夠成功插入。可是假設(shè)大于2。那么就拋出異常(事務(wù)處理必須拋出異常,僅僅有這樣Spring才幫助事務(wù)回滾)。這樣數(shù)據(jù)庫就會回滾,不插入不論什么數(shù)據(jù)。測試結(jié)果假設(shè)數(shù)據(jù)庫沒插入不論什么數(shù)據(jù)。那么表示事務(wù)處理配置成功,反正,失敗。

注意@Transactional僅僅能被應(yīng)用到public方法上,對于其他非public的方法。假設(shè)標(biāo)記了@Transactional也不會報錯,但方法沒有事務(wù)功能。


實體類、DAO接口。業(yè)務(wù)接口,以及業(yè)務(wù)實現(xiàn)都有。這個測試僅須要在業(yè)務(wù)層中加入一個方法,然后使用JUnit測試就可以。業(yè)務(wù)實現(xiàn)類中加入例如以下方法,注意注解@Transactional:

/**
	 * 事務(wù)處理必須拋出異常。Spring才會幫助事務(wù)回滾
	 * @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測試會發(fā)現(xiàn)出現(xiàn)錯誤,這是由于方法中拋出了這個異常。實質(zhì)上確實進行了事務(wù)管理,數(shù)據(jù)沒有插入,此時表示配置成功了;反之,假設(shè)去掉注解。那么前兩條數(shù)據(jù)會插入成功。然后后面會拋出異常。

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

總結(jié)

以上是生活随笔為你收集整理的SSM框架——以注解形式实现事务管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。