00:00
好,那现在咱们就把咱们的事物给加上大家注意,非常简单,因为咱们基于注解的声明式事物该怎么用,我之前也跟大家说过,对吧?大家注意我们在这呢,咱们来找到我们的这个配置文件,首先呢,声明式事物中咱们说了你是不需要手动去创建事物的签面,也不需要去写通知的,为什么?因为在我们当前的spring中,它为我们提供的有事务管理的签面和通知,叫什么叫事务管理器,叫做事物管理器啊,大家注意我们在这咱们第一件事情啊,咱们配置事物的第一件事情就是来配置事物的啊,配置事物管理性,管理性好,然后这个东西它其实就是一个对象啊,就是一个病,然后它的class等于谁,大家注意啊,Trans action manager,大家看你看有没有啊,叫做transaction manager,有,但是你会发现这东西是个啥接口。那所以我们现在需要来找到它的实现类啊,这个东西大家就不需要去看它的继承和实现结构了啊,在这直接跟大家说它的这个实现类是什么?叫做data source transaction manager,叫做数据源事务管理器,其实这个东西很好理解,为什么呢?咱们从它的名字上咱们就能看出来这个事物管理器啊,然后前面加上了一个数据源。
01:21
因为咱们的事物,你要想来处理事物,你必须得有数据源,因为数据源是来管理连接的,对吧?那大家想想你事物所有相关的代码,它是不是都是通过连接对象来设置的呀?比如说咱们来关闭事物的自动提交是connection对象里面的set or to commit,你的提交事物是connection里面的commit方法回滚connection点。对不对,所以说我们当前的事务管理,它是必须要依赖于谁的数据源的,好那我们现在咱们写完之后,那所以大家会发现这里面咱们必须要来设置一个属性,就是谁,就是我们的data source什么意思数据源?
02:03
对吧,因为我们当前所有跟事物相关的操作都是基于对象,基于咱们的连接对象来操作的,所以说咱们在这必须要设置数据源啊,好,然后ref,那上面不是有一个数据源吗?这不就可以了吗?对不对?好,下面大家再来看我们现在还需要干什么,看好了啊,咱们需要来开启事物的注解驱动。叫做开启事物的注解驱动,什么意思呢?在这咱们需要设置一个标签,TX开头的,然后这个标签叫什么?大家注意它用到的是TX的命名空间啊,所以说我们在这需要把这个命名空间选对了,它叫allation gun driver,你看多少个,好多个呀,看咱们的stack里面,Sta里面是不是有,然后test里面有,然后T,然后test这一个命名空间里面也有,TX里面也有,能看懂吗?你一定要选好,我们说的咱们现在用到的命名空间是谁,是TX,所以说千万不要选错了啊,好,然后咱们把它给设置完就可以了。
03:06
然后大家会发现,诶,你看这个东西,这是个啥。这个图标大家还认识不认,这不就是一个环绕通知吗?对不对,咱们的前置通知只有上边的半拉对不对?后置通知只有后边的半拉,然后呢,返回通知呢,在这有一个什么呀?只有下边的半拉,在这儿还有一个什么箭头对吧?然后异常通知只有下边的半拉,但是在这儿有一个闪电的符号,有印象没?对不对,所以说大家注意这是啥,这就是我们当前咱们的环绕通知,好,然后为什么呢?咱们就写了这样的一个标签,它就是环绕通知嘛,不是,其实大家注意这个东西才是切面。知道吧,这里面放的才是通知,我们开启事物的注解驱动这个东西是干什么的?大家注意它的作用啊,是将我们当前咱们的事务管理器,把这个切面里面的通知呢,给作用到我们当前的连接点上。
04:00
好,就像是这里面大家注意它们两个是有关联的,知道不什么关联呢?大家看你看这里面有一个属性叫transaction manager,什么意思,叫事物管理器,然后我们必须要将它两个给关联起来,怎么关联你看啊,然后transaction manager里面有一个默认值,就叫transa manager,好,然后他在这来写的是谁写的,其实就是我们当前咱们的事务管理器的病的ID。能看懂吧,为啥报错啊,因为在这在IOC容器中有一个B的ID叫它吗?没有,你看我在这把这个ID设置为transaction manager的时候,大家看你看他还报错,我报了,我报错了,而且变成灰色的了,为啥变成灰色,咱们说过在IOC容器,在咱们的spring的配置文件里面,如果你的某一个属性你用的值是默认值,那当前这个属性值就会变成灰色。所以说它是灰色,说明它是默认值啊,好,然后呢,所以大家看,那这个时候它们两个就有关联了,那所以我们当前的这个标签,它其实就是把我们当前这个事物管理器里面的环绕通知来作用于我们的连接点的,那怎么作用于连接点,因为我们现在用的是注解驱动,大家注意啊,那它的连接点咱们怎么去找,很简单,好,大家注意,它可以将咱们的事物管理器,或者说哎,它可以将咱们使用哎,At t r trans action,然后这个注解所标识的方法,然后或类中所有的方法,对吧,然后使用事物管理,使用事物进行管理。
05:45
使用事物进行管理,OK,大家注意啊,所以说在这这个东西它就是来管,就是把咱们的通知来作用于我们的连接点的,那连接点在哪?很简单,你这个注解加到了哪一个方法上,哪一个方法就是连接点,或者说这个注解也可以加到我们当前的类上,如果你加到类上,这个类中所有的方法它都是连接点。
06:09
OK吧,所以大家想,你看咱们之前是不是就跟大家说的声明是事务里面非常简单,这个事务管理的切面需要咱们写吗?不需要,通知需要咱们写吗?不需要。我们只需要把这个通知作用到连接点就行,怎么作用到连接点,大家想你如果说你要用注解的方式,那咱们通过注解来标识的方法就是连接点,而如果我们现在不用注解,那你不就是通过标签把我们当前的切入,通过咱们的切入点表达式,然后跟我们当前的通知来进行关联,对不对啊,这个基于叉L的,咱们一会再说,咱们就先说这个注解的看好了啊,然后现在我们这个你设置这个标签是干什么的,再跟大家说一下,就是把我们通过这个a transactional注解所标识的方法或类中所有的方法来使用事物来进行管理。
07:03
OK吧,好,那所以咱们现在基于注解的声明式事物就配置完了呀,大家注意,非常简单,先配置事物管理器,再开启事物的注解驱动完事。OK吧,好,那行,那我们现在咱们再来看这个属性,大家注意我说的这东西是默认值,那也就是说如果你的这个B的ID啊,它就叫做transaction manager,那我们在这大家注意这个属性你可以不写。但是我建议大家你最好还是把它写出来,因为如果我们初学阶段,你不写这个属性,你压根就不知道他们两个有什么关系,OK吧,所以说我建议大家把它给写出来啊,好行,然后咱们的transaction manager,然后这个属性大家注意它是用来设置谁的,然后来设置咱们的事物管理器的事物管理器的ID。来设置务管理器的ID,如果说咱们当前事务管理器的ID,它默认就是纯a manager,那该属性可以省略不写好,若事物管理器的B的ad,然后默认为谁呀,叫做transaction manager,然后则。
08:19
该属性,该属性可以不写OK啊,该属性可以不写,这个大家注意,那行,那咱们现在就配置完了呀,那我们就可以来进行一下测试了呀,大家注意,非常简单啊,再说一遍,先配置事物管理器,然后再来开启事物的注解驱动完事,那他怎么来管理事物,很简单,这就是一个切面。它就可以将我们当前的通知作用到哪儿,你哪个方法上加上了这个注解。那咱们当前这个注解所标识的方法就是连接点,或者说你也可以把它给加到咱们。当前的这个类上,这个类中所有的方法,然后都是连接点,OK吧,来,咱们来找到我们的book service m PL,大家知道为什么加到这不知道。
09:06
我们之前呢,咱们也说过啊,就是说我们的三层架构里面,哪一层是我们在哪一层里面来设置,事务管理我们需要在service层里面来设置,所以说咱们现在就需要在service的实现类里面,在咱们的方法上来加上事务管理的这个注解,就叫做trans action就可以了啊好。大家看我现在我干嘛,我把这里面咱们的book,把这个与库存再改成是100,咱们来保存,然后现在我们再来执行这个by book的方法,大家注意,这个时候他就可以被事务管理了啊错,他肯定还是会报的,但是我们需要来看的是最终咱们实现的效果,对吧?我们现在要实现的效果就是最终他要么都成功,他要么都失败,对不对,也就是说你要么。我们当前咱们的更新库存能成功,更新余额也能成功,那他就都成功,如果说我们当前更新库存和更新余额有一步不成功,那我们当前的整个操作将全部失败。
10:07
对不对,所以说大家看啊,我现在再来一个刷新,你看这余库存是多少,是不是还是100啊,有没有被更,有没有被更新,没有被更新,然后咱们的余额就更不用说了,你肯定更新不了,对不对?好,所以说大家注意,这就是基于注解的声明式事物,非常的简单,OK吧,然后我们现在只需要来进行两个操作,大家注意啊,咱们写到哪呢?咱们写到咱们的测试类里面吧,行吧,好,然后咱们的声明是声明是事物啊,声明是事物。的配置步骤,配置步骤首先大家注意第一个步骤,看好了啊,需要干什么来在spring spring。的配置文件中,然后来配置事务管理器,好,这是第一步,第二步然后来开启,然后来开启事物的注解驱动。
11:03
注解驱动完事。能看懂吧,然后咱们最终达成的一个效果是什么?大家注意啊,然后咱们只需要在啊,这个被事务管理,被事务需要被事务管理的啊,咱们在需要被事务管理的方法上啊,然后来添加什么,来添加咱们的it trans action no,然后这个注解啊,然后该方法,然后就会被事务管理,就会被事务管理OK啊非常的简单。好,当然了,咱们刚才也说了it transactional这个注解,它能够用在哪?大家看,它不单能够用在咱们当前的方法上,它还能用在我们当前的类上,比如说咱们把它拿过来,你给它放到这儿,然后这个时候它就可以来对我们当前类中所有的方法来进行事物管理,那下面我们在这再来一个执行。
12:04
然后大家来看啊,你看咱们把circle样打开,这个就不用看了,咱们主要来看的是图书表啊,来一个刷新,大家看是不是还是100啊,OK吧,好,所以说trans action,然后这个注解,然后标识的位置,标识的位置好,然后第一它可以来标识在哪,标识在方法上,然后第二它可以标识在类上,如果标识在类上的话,然后则类中啊所有的方法都会被事务管理。好,则类中所有的方法都会被事物管理啊,行,大家注意,这是咱们的a transactional这个注解标识的位置。好,然后那我们在之前咱们介绍声明式事物的时候,咱们也说了,这个声明式事物里边啊,它不单能够帮助我们来实现一个简单的事物的效果,它还可以帮助我们从数据库层面呢,来优化我们当前的事物。
13:03
就比如说我们可以来设置事物相关的一些属性来大家看,你看咱们的transa,你看这里面的属性可是很多的,大家看啊,你看这是value对不对,然后这里面还有什么transaction manager,然后还有什么label,对吧?然后还有什么propagation对不对,然后还有什么isolation,这是事物的传播行为,这是事物的这个隔离级别对吧?然后还有事物的超时时间,还有事物的这个什么,这也是超时时间的意思啊好,还有什么事物的只读,那下面呢,咱们就来看一下这里面的一些属性,咱们把这里面重要的一些属性呢给大家讲一下,也就是说咱们的声明式事物不但能够实现事物管理,它还能把我们当前咱们事物实现过程中的一些对吧,其他的一些功能,其他的一些配置,通过咱们这里面的一些属性来进行设置啊,好OK。
我来说两句