spring 事务管理详解 学习心得

今天,我终于登上了你的诺曼底,spring事务。

在此之前,一谈起spring我就没底,虽然用的很顺手,但是其中的AOP和事务一直未理解和掌握,数次尝试突破都未成功,之前看过很多网上的相关文章和书籍,要么基于的版本不同,有的基于spring2有的基于spring3;要么切入点不同,有的讲的太低级,我都懂,有的讲的太庞杂,我晕了。。。。。。

从这周一开始,我决定在试一下。计划每天的上午专门学习,横扫各大网站,收集文章,然后对其分类,整理记笔记,到周二坚持一个一个的看,规整,理解,熟记,本子下写下了密密麻麻的文字,下班前我开始慢慢理解,原来是这样,也不复杂嘛,呵呵。太开心了。

周三上午,写了demo,并且运用到了项目中,我终于掌握了!

今天跟大家分享我的学习心得,希望对和我有同样烦恼的朋友有帮助。

第一节:首先了解下什么是事务:

事务(Transaction) ,是指一个逻辑工作单元中执行的一系列操作(即若干条数据变更sql),要么完全地执行,要么完全地不执行,以此保证数据的完整性。

例如有一业务:【帐号A】转账100元给【帐号B】,那么会产生两个动作

1:【帐号A】里的金额减去100  sql:update account set sumMoney-=100 where id=【帐号A】

2:【帐号B】的金额加上100    sql:update account set sumMoney+=100 where id=【帐号B】

这两个动作为一个逻辑单元,如果执行过程中有异常,两个操作都应该rollbacK数据,保证数据完整性,如果无异常则提交两个数据变更动作,此时数据才真正持久化到数据库里。

这就是数据库事务的原理,我想大部分人都知道。

在使用JDBC时,因为没有像sprng那样的事务管理器,这些操作都得手写:

1,获取DbConnection

2,设置 connection的autoCommit属性为false(意思是这个连接内的 inert/update 操作不自动提交数据,需要收到commit才能持久化到数据库)

3,获取预处理  DbConnection.prepareStatement(sql)

4,执行语句 prepareStatement.excuteUpdate();

5,根据执行情况,如果无异常提交数据(DbConnection.commit()),如果有异常回滚数据(DbConnection.rollback())

到此就是一个数据库事务的处理过程,这种写法叫编程式事务,在spring中封装了以上操作,并提供了更加高效便捷的事务管理方式,spring支持两种事务处理方式:1,编程式事务(简单的封装)。2,声明式事务(spring事务的精髓)

第二节:spring的声明式事务之@Transactionl注解实现方式

随着spring版本的更新,spring提供了两种声明式事务的写法:通过XML配置文件+AOP实现和通过@Transactionl注解实现

因为注解事务的写法比较简单便捷,所以今天先讲这种写法的实现步骤:

<!-- 0,添加TX命名空间-->

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

 <!-- 1,启动包扫描功能,以便注册带有@Transactional、@Controller、@Service、@repository、@Component等注解的类成为spring的bean -->
 <context:component-scan base-package="com.webApp" /> 
 <!-- 2,配置事务管理器 ,此处使用springJdbcTemplate的事务管理器,你也可以换成hibernate等事务管理器-->
 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="business_dataSource"></property>
 </bean>
 <!-- 3,启动注解,驱动spring事务管理器,此时,项目中加@Transactional注解的方法,都会加上事务管理-->
 <tx:annotation-driven transaction-manager="txManager"/>
 //4,在一个POLO类前,或方法前加@Transactional注解
	@Transactional(propagation=Propagation.REQUIRED)
	public Map editOperator1(String id,String name,String phoneNo,String Address){
		String conId=dao.getId("id", getClass());
		String sql1="insert into ope VALUES ("+id+",'"+name+"','"+conId+"')";
		String sql2="insert into cont VALUES ("+conId+",'"+phoneNo+"','"+Address+"');";
		//如果捕获到异常,就会自动回滚
		dao.update(sql1);
		dao.update(sql2);
		return null;
	}

	public int update(String sql){
		JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
		int i;
		try{
			i=jdbcTemplate.update(sql);
		}catch(DataAccessException e){
			throw e;
		}
		return i;
	}

好了,spring注解事务就是这么简单。还有不懂的地方请回复我。

第三节:spring的声明式事务之XML配置+AOP实现方式(这个比较多,明天待续)

时间: 2024-10-09 09:36:02

spring 事务管理详解 学习心得的相关文章

这可能是最漂亮的Spring事务管理详解

事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用: 一致性: 执行事务前后,数据保持一致: 隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的: 持久性: 一个事务被提交之后.它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响. Spring事务管理接口介绍 Spring事务管理接口:

一文解析Spring事务管理详解;通俗易懂,轻松掌握!

事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性:?事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用: 一致性:?执行事务前后,数据保持一致: 隔离性:?并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的: 持久性:?一个事务被提交之后.它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响. Spring事务管理接口介绍 Spring事务管理接口:

Spring 事务机制详解

Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,仅供学习参考. Spring声明式事务让我们从复杂的事务处理中得到解脱.使得我们再也无需要去处理获得连接.关闭连接.事务提交和回滚等这些操作.再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码.我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性.事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成.我们在进行事

Spring学习之Spring的声明式事务管理详解

声明式事务管理 大多数Spring用户选择声明式事务管理的原因是,这个是对应用代码影响最小的选择,因此也最符合 非侵入式 轻量级容器的理念. Spring声明式事务管理可以在任何环境下使用.只需更改配置文件, 它就可以和JDBC.JDO.Hibernate或其他的事务机制一起工作. Spring的声明式事务管理可以被应用到任何类(以及那个类的实例)上. Spring提供了声明式的回滚规则. Spring允许你通过AOP定制事务行为.(例如,如果需要,你可以在事务回滚中插入定制的行为. 你也可以增

spring事务配置详解

spring的事务配置一直感觉都比较的模糊,没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. 总结如下: Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSource.TransactionManager这两部分只是会根据数据访问方式有所变化.但总的来说都是对Connection的封装,变化基本上可以忽略

Spring事务之详解--三种实现方式

实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: /* * 账户 */ public class Account { private int aid;//账户编号 private String aname;//账户名称 private double balance;//账户金额 public int getAid() { return aid; } public void setAid(int aid) {

Spring事务管理 与 SpringAOP

1,Spring事务的核心接口 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略.  Spring事务管理涉及的接口的联系如下: 1.1 事务管理器 Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现. Spring事务管理器的接口是org.springframework.tra

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

(转)Spring事务管理(详解+实例)

文章转自:http://blog.csdn.net/trigl/article/details/50968079 写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 一.初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱.  比如你去ATM机取1000块钱,