spring事务管理-概念部分

这个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当中,操作事务的核心对象是谁了,然后操作事务的属性说了,就剩使用代码来演示了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值