这个Spring中的事务呢,是提供了一套可以管理项目中管理事务的机制,使用Spring事务的好处,就是我们的项目里面,不需要手动来管理事务了,那这样的话咱们先复习一下,先复习一下事务,事务复习好像刚有过一次,hibernate中复习过事务,那接下来事务,相关的概念需要知道,第一事务特性,事务特性,要知道他是有ACID,然后呢再往下,事务并发产生的问题,并发问题,并发问题有脏读,幻读,不可重复读,然后解决并发事务的,事务的隔离级别,那隔离级别的话,有四个,读未提交,读已提交,可重复读,还有咱们的串行化,这四个级别,那这就是咱们之前学过的事务的特性,那接下来介绍一下,咱Spring提供的事务管理,Spring是把咱们事务管理的代码,Spring封装了事务管理代码,那Spring封装事务管理代码的话,首先咱们说代码,代码的话,封装的无非就是打开事务的代码,还有提交事务的代码,以及还有什么回滚事务的代码,他封装也就是封装这些,但是在封装的时候,有这么一个问题,你想好像原生的JDBC当中,你想要完成事务的这三个操作,代码分别是,setAutoCommit为false,提交事务就是connection.commit(),回滚事务就是connection.rollback,后来咱们学了hibernate,你发现好像操作事务代码好像有变化了,咱们在hibernate中打开事务,是session.begin...,然后提交事务是session.commit,然后回滚事务是session.rollback,那咱们后面,就不是我了,后面其他还会教你们一个,Mybatis,这个框架,那Mybatis框架,虽然没学,但是你也应该知道,是用来操作数据库的,他跟hibernate,功能是重合的,那这里面细想一下,到了Mybatis里面,好像操作事务的代码,又会发生变化,是不是,hibernate中用Transaction对象,到Mybatis里面可能用一个咱们不知道的对象,万一以后再有别的操作框架,第三个框架,是不是操作事务代码又不一样了,那Spring想操作事务封装的代码,好像还不太好封装,对不对,因为不同的技术操作是不一样的,于是Spring是要封装的,他怎么做呢,如果是你们你们怎么做,这个时候首先,事务不管用什么来操作事务,事务咱们要干的事是一样的,你不管在什么平台用什么操作,操作事务永远是打开提交回滚,是不是,所以Spring他封装事务它是这样,这就是基于接口,于是Spring他就提供了一个接口,封装的事务操作,事务操作,因为在不同平台,操作事务的代码,各不相同,所以Spring他提供了一个接口,Spring他首先提供了一个接口,这个接口的名字呢,就叫做TrsanctionManager,PlatFormTransactionManager平台事务管理器这个对象,于是他提供了一个接口,这个接口当中,这个接口当中的方法,封装了事务操作的方法,只能声明方法,他声明了事务有哪些操作,声明这些方法,针对不同平台,他提供了不同的实现类,他提供不同的实现类,它会提供一个JDBCTransactionManager,然后等到hibernate平台,它会提供一个hibernate,它会提供HibernateTransactionManager,Mybatis平台我就不写了,等你学到就知道了,那这样的话你看,接口当中声明事务有哪些操作,针对不同的平台,是不是有不同的实现类,你像JDBCTransactionManager他封装了操作事务代码,Hibernate实现类里面,封装的代码就是这个Session和Transaction操作,所以玩Spring的事务,最核心的你要记住,你要知道,咱们操作事务的核心对象,是他,但是这个对象需要咱们写吗,这个接口需要咱们来实现吗,不需要,咱们在不同的平台,知道用不同的实现类就可以了,你只要记得是要用JDBC操作用的数据库,等咱们后边学了,hibernate与Spring整合之后,咱们到时候再玩事务就用这个,等将来你再用Mybatis,你用Mybatis那个,所以记住,这个接口或者底层的实现类,是咱们Spring操作事务最为核心的对象,注意在Spring中,玩事务管理,最为核心的对象,就是TransactionManager对象,要想玩事务,它是要配的,那接下来的话,咱们来介绍一下,那用它来玩的话,你还得知道与事务相关的属性,Spring管理事务的属性介绍,因为人家已经给你管理相关的代码,一些管理事务的细节,有一些可选的细节,他还暴露出了选项让你来选,比如这个事务给你封装好了,但是你得配置,来配置这个事务,那这些事务的属性包括哪些呢,事务的隔离级别,你可以去选择,事务的隔离级别,然后呢,Spring想的很细的,想得很周到的,考虑到此次事务是否只读,比如你这次操作,如果涉及到数据的增删改,那你就把只读操作关掉,因为这次可能要操作数据库,如果把这个事务只读打开,就意味着你不能修改数据库任何数据的,如果你修改的话他给你报错,别人想的很细,考虑的很周到,他顾虑的还有传播行为,事务的传播行为,事务传播行为是咱们以前没有听说过的,接着来说一下事务传播行为是啥东西,事务传播行为是指在某种情况下,如何来管理事务,事务传播行为,你们可以想象一下,将来咱们写service,这里有一个service方法,哈哈,haha()方法,咱们的业务方法,这是咱们的service,然后还可能有一个业务方法,叫hehe(),按照咱们传统的开发,按照咱们传统的事务来说,咱们以前在完事务的时候,比如haha是业务方法,咱们在业务方法执行之前,是不是打开事务,打开事务,接下来执行业务方法,接下来关闭事务,关闭,你只考虑到在业务方法当中,需要干这些事,有没有可能以后调业务方法存在haha()业务方法调用了hiahia()业务方法,听明白啥意思,咱们现在好像service方法直接调DAO的,咱们业务还没有复杂到平行的互相调用,但是如果平行互相调的话,那你haha打开事务关闭,那如果调用hiahia()也是打开事务,就有问题了,听懂啥意思,所以事务的传播行为,如果还是像现在一样,业务方法不可能平行调的,这个属性如果不存在,业务方法平行调的话,这个属性对他来讲没有任何意义,压根就没用,事务传播行为指的就是,业务方法之间,平行调用时如果来处理事务问题,传播行为属性决定业务方法之间,调用时,事务应该如何处理问题,那到底怎么来处理呢,也是给你很多选项,那选项有哪些呢,具体有7个选项

REQUIRED一个,SUPPORTS一个,MANDATORY一个,然后REQUIRED_NEW一个,NOT SUPPORTS一个,Spring给你想的多细,注册FACEBOOK你注册过吗,注册性别有10多种,10多种性别让你选,人家就是考虑得这么周到,人类的性别有10多种,它是从性别分类的,他这个性别是性格分类的,不只是传统的男和女,然后还有变性,还有男变女,女变男,他们当然说的比较专业了,人家考虑的就是周到,人家不仅考虑到业务之间的平行调用,还考虑到了N多种情况,供你选择,哪怕他考虑的这些情况,百分之九十你一辈子用不着,但是人家考虑到了,而且确实是这样,在这里一共是7种传播行为的指令,第一种传播行为,前面PROPAGATION是一个固定的前缀,取值要看后面,REQUIRED这第一个值,叫做必须的事务,啥意思呢,就是在haha和hiahia之间

互相调的时候,必须要带有事务环境,才能调这个hiahia,采用的策略是,如果你haha没有开事务,就去调hiahia,那么他就会开启一个新的事务,听懂啥意思不,如果haha已经把事务开了,那么再hiahia的时候,那么hiahia就使用,我好后悔这个方法名,如果haha已经开启一个事务,那么他去调hiahia,然后hiahia就用haha已经开的事务,操作就可以了,听明白啥意思了,明白啥意思了,我告诉你,虽然他讲了很多,但是基本上都用这种,因为你理性的考虑一下是不是这个种最合理,haha如果开了事务,只能用haha的,他两就在一个事务之内了,如果haha没开,那就必须开一个新的事务,使其在事务当中,这也是咱们日常生活当中最常见的情况,其他的话你再看,这个SUPPORT,SUPPORT就相当随意一些了,haha调hiahia的时候,那如果是已经开了事务了,那他没用,如果没开,那咱们就都不用,那就没事务管理,挺明白啥意思,就是SUPPORTS,如果存在就用,不存在就拉到,然后MANDATORY,这是啥意思呢,就是需要你手动来开,你haha如果有事务那就没问题,那如果haha没事务,那你就必须手动开启一个事务,不开那就报异常,有事务就用,没事务就抛异常,然后再往下,REQUIRED_NEW这个单词,是不是说的很清楚了,就和REQUIRED很类似,就是haha调用hiahia的时候,必须开启一个事务,必须得开启一个新的事务,不管haha他开不开事务,他就开启一个新的事务,来执行hiahia,然后NOT_SUPPORTED,那就正好和SUPPORT对应了,就是以非事务方式运行,那就是如果有事务的话,那咱们就把一个事务先挂起,因为我不支持事务,先挂起,然后呢,hiahia必须在没事务环境下操作,重新打开事务再继续执行,haha如果有事务环境,调用hiahia需要把事务先挂起,这个事务先暂停,然后执行hiahia,执行完了以后再回来,然后再执行这个事务,实际开发中没有这种业务情况,咱们在开发当中,只要是业务方法,不可能不存在事务的,NEVER,在英语国家这个语气是很强烈的,永不,必须要以非事务运行,如果有事务存在,就必须抛出异常,就是坚决不能够有事务,还有NESTED,NESTED就是,如果当前事务存在的话,那么会再开启一个新的事务,让这两个之间互不干扰,他两分别有两个事务,听明白啥意思不,叫NESTED,其实底下这6个,基本上都是扯淡的,看看明白啥意思,出去聊聊天用,其实这些东西背下来聊聊天挺好的,再说你这个舞台就来了,但是用的话记住,切记REQUIRED,那这就是咱们的传播行为,隔离级别我就配号写上取值吧,把这个值配套粘过来,是不是隔离级别,只读的话到时你看,true或者false,true是只读,false是可操作

那这样的话,咱们知道了,Spring当中,操作事务的核心对象是谁了,然后操作事务的属性说了,就剩使用代码来演示了

spring事务管理-概念部分相关推荐

  1. Spring事务管理 与 SpringAOP

    1,Spring事务的核心接口 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略.  ...

  2. 什么是事务的传播_这么漂亮的Spring事务管理详解,你不来看看?

    事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...

  3. SPRING 事务管理说明

    spring 事务管理是通过AOP拦截指定的方法,进行事务管理. 事务配置 <aop:config proxy-target-class="true"><aop: ...

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

    写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: ...

  5. 多数据源 事务管理_可能是最漂亮的Spring事务管理详解

    事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...

  6. Spring事务管理详解_基本原理_事务管理方式

    Spring事务管理详解_基本原理_事务管理方式 1. 事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,使用JDBC的事务管理机制,就是利用java.sql.Connection对象 ...

  7. Spring事务管理全面分析

    Spring 事务属性分析 什么是事物   事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能 ...

  8. batch spring 重复执行_可能是最漂亮的Spring事务管理详解

    作者:Guide哥 事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完 ...

  9. Spring事务管理中异常回滚知识点总结

    记录总结Spring核心知识点:事务使用与它的传播机制 目录 前言 问题场景 Spring 管理事务的原理 MySQL中的事务管理 JDBC中的事务管理 Spring 中的事务管理 Spring中的事 ...

最新文章

  1. phpnow mysql字符集_使用PHPnow搭建本地PHP环境+创建MySQL数据库
  2. 爬虫,反爬工具fake-useragent,随机useragent模块教程
  3. poj 1185 火炮 (减少国家DP)
  4. 网曝Facebook中国员工跳楼身亡,总部态度冷漠,华人群体抗议:为死者讨回公道...
  5. 苹果手机如何调节屏幕彩色(对于百度提供的方式行不通时此方法必有用)
  6. Atitit enhance dev eff read req提升开发效率 可读性规范 目录 1. 提升效率的俩大原则 1 2. 命名规范 见名字知道意思 1 3. 层次结构缩减 单层 vs 双
  7. 浅谈JAVA项目开发
  8. 大学生html电影网页设计作业成品 我喜欢的电影榜单题材网页制作代码 简单静态网页模板下载
  9. link_path_walk()分析
  10. 【数据结构(青岛大学 王卓)】第2章 线性表 学习笔记(七)2.5 线性表的链式表示和实现1
  11. 手机打电话提示无法连接到移动网络
  12. P8588 『JROI-8』雷雨天特别行动科 java版题解
  13. 如何修改Bash Shell的提示符的格式和配色
  14. eclipse点餐系统的框架
  15. Could not find parameter map com.itcast.mapper.userinfMapper.map
  16. Python中按位取反运算操作的解法
  17. 华为面试Android岗;群面+技术面+综合面+英语面
  18. C-class Week1.Day2
  19. 【JVM】<Java虚拟机>JVM架构各种**虚拟机
  20. 带plx芯片的服务器主板,主板上面都有啥?常见板载芯片功能介绍(三)

热门文章

  1. Coreseek-带中文分词的Sphinx
  2. linux c 系统调用
  3. 如何理解并学习javascript中的面向对象(OOP)
  4. require(),include(),require_once()和include_once()的异同
  5. Visual Studio 2005中C++的变化
  6. 【Spring学习】spring提供的三种定时任务
  7. sql语句转化为分页查询的一种实现
  8. 阿里云容器服务cni网络插件terway非官方网络性能测试
  9. [转:作者: 出处:javaresearch ]选择JSF不选Struts的十大理由
  10. Sybase数据库在UNIX、Windows上的实施和管理 出版预告