在一个业务的实现过程中,可能需要多条sql完成对数据库的操作,比如账户登录,需要匹配用户名和密码,然后要增加积分,还要记录登录的ip和时间,这可能需要三个sql语句,这三个语句应当是一个整体,任意一个sql执行不成功,都表示这个业务没有执行完成,这就有了事务的概念。

事务是数据库中的概念,就是对数据库的一组操作,由一条或多条sql组成。

事务具有同步的特点,一条sql执行失败,其他sql都不会执行,即要么都执行,要么都不执行。

START TRANSACTION开启一个事务,这之后执行的sql语句,在用COMMIT提交事务之前,都没有被"写死"到数据库中,可以用ROLLBACK进行回滚操作。

Spring在jdbc中提供了一个事务管理组件:org.springframework.jdbc.datasource.DataSourceTransactionManager

  1. <!-- 配置事务管理组件 -->
  2. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  3. <property name="dataSource" ref="dbcp"> <!-- dbcp是连接池组件(org.apache.commons.dbcp2.BasicDataSource)的bean -->
  4. </bean>

使用事务管理的功能,跟创建bean一样,可以采用注解和xml配置两种方式。当然可能还有别的方式,还没学到

  1. <!-- 采用注解方式:有源码的情况下,将注解加在方法上 -->
  2. <!-- 开启事务注解标记@Transactional,当调用带@Transactional标记的方法时,将txManager的事务管理功能切入进去 -->
  3. <tx:annotation-driven transactional-manager="txManager" />
  4. <!-- 在需要事务管理的方法上加上@Transactional注解即可 -->
  1. <!-- 采用xml配置的方式:使用别人写好的功能,没有源码,就可以用xml配置 -->
  2. <tx:advice id="txAdvice" transaction-manager="txManager" > <!-- 仍然使用txManager作为事务管理组件 -->
  3. <tx:attributes>
  4. <tx:method name="updateTitleAndBody" /> <!-- 在哪些方法上添加事务管理 -->
  5. <tx:method name="register" /> <!-- 这里写方法名 -->
  6. <tx:method name="checkLogin" /> <!-- 支持通配符 -->
  7. <tx:method name="listNotebook" />
  8. <tx:method name="getDeletedNotes" />
  9. </tx:attributes>
  10. </tx:advice>
  11. <!-- 通过aop机制完成事务管理 -->
  12. <aop:config> <!-- 作用在哪些组件上 -->
  13. <aop:pointcut id="target" expression="within(net.sonng.note.service.UserServiceImpl)" />
  14. <!-- 这个expression的写法有讲究 -->
  15. <aop:advisor advice-ref="txAdvice" pointcut-ref="target"/>
  16. </aop:config>

其他:MyBatis应该也提供了事务管理的组件

0045 Spring中使用DataSourceTransactionManager进行事务管理的xml配置的更多相关文章

  1. Spring中使用DataSourceTransactionManager进行事务管理的xml配置

    在一个业务的实现过程中,可能需要多条sql完成对数据库的操作,比如账户登录,需要匹配用户名和密码,然后要增加积分,还要记录登录的ip和时间,这可能需要三个sql语句,这三个语句应当是一个整体,任意一个 ...

  2. Spring中实现多数据源事务管理

    文章转自  https://www.2cto.com/kf/201507/424229.html 前言 由于项目中引入了多个数据源,并且需要对多个数据源进行写操作,那么多数据源的事务管理自然成了不可避 ...

  3. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  4. spring事务管理(xml配置)与spring自带连接数据库JdbcTemplate

    什么是事务,很通俗的话来说就是,我们日常生活中总会出现在银行转账的业务,加入A向B转账100元,此时A的账户中应该减少100元,B的账户中增加100元,但是如果在A转完账B还没有接受的时候,服务器出现 ...

  5. spring+mybatis之声明式事务管理初识(小实例)

    前几篇的文章都只是初步学习spring和mybatis框架,所写的实例也都非常简单,所进行的数据访问控制也都很简单,没有加入事务管理.这篇文章将初步接触事务管理. 1.事务管理 理解事务管理之前,先通 ...

  6. 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理

    1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...

  7. Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理

    原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...

  8. Spring 多数据源 @Transactional 注解事务管理

    在 Spring,MyBatis 下两个数据源,通过 @Transactional 注解 配置简单的事务管理 spring-mybatis.xml <!--******************* ...

  9. Spring 简单而强大的事务管理功能

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

随机推荐

  1. [Ubuntu Setup] Ubuntu 13.04 安装 ia32-libs

    http://stackoverflow.com/questions/23182765/how-to-install-ia32-libs-in-ubuntu-14-04-lts sudo -i cd ...

  2. leetcoder-50-Pow(x, n)

    Pow(x, n) 能够直接用库函数pow(x,n)一步搞定,但明显这样就没意思了.   參考   快 速 幂 取 模 二分.复杂度为O(logn) 递归方法 class Solution { pub ...

  3. WSDL-学习总结

    1.什么是WSDL 是一种使用 XML 编写的文档.这种文档可描述某个 Web service.它可规定服务的位置,以及此服务提供的操作(或方法). 2.WSDL文档结构: <binding&g ...

  4. http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html

    http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html

  5. urllib库在python2和python3环境下的使用区别

    好东西啊!!! Python 2 name Python 3 name urllib.urlretrieve() urllib.request.urlretrieve() urllib.urlclea ...

  6. iOS 判断NSString是否包含某个字符串

    主要是使用3个方法 rangeOfString    是否包含 hasPrefix      是否在前缀包含 hasSuffix           是否在末尾包含 如代码: //判断字符是否包含某字 ...

  7. Linux下好用的命令

    split -l 10000 articles.json  将文件按行分成多个文件

  8. mysql 创建函数或者存储过程,定义变量报错

    报错的原因是因为在过程或者函数中存在分隔符 分号(:),而mysql中默认分隔符也是 :,这就导致存储过程分开了 在存储过程外面包一层 delimiter //   code  //就行了

  9. 创建win32窗口

    #include <windows.h> LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HIN ...

  10. 执行hbm2java工具和hbm2ddl工具

    下面内容整理自<精通hibernate> 第二版 Hibernate提供了从映射文件到Java源码的转换工具,名为hbm2java工具,能够利用ANT工具来执行它. <span st ...