00:01
嗯,来我们接着往后讲啊,好,那么接下来我们看哎,下一个事物的属性啊,我们叫什么呀?叫做这个事物的回滚与不回滚啊啊回滚与不回滚OK啊,那这个的话是什么意思呢?就是呃,默认情况下啊,先给大家去说一下这个默认情况啊,默认情况下啊,这个point会对所有的运行时异常啊进行什么呀?进行事物的回滚啊呃,这个怎么理解呢?啊,大家听我讲就是,呃,如果说我的这个方法上面加上了这个事物了啊,就是我们通过这个注解把这个事物加上了,那么只要你在这个方法中抛出了一个异常,什么异常呢?叫做运行时异常,知道什么叫运行时异常吧,对吧,就是那个runtime exception下面所有的异常,呃,只要你抛出来了,那么破都会给他什么进行回滚的?
01:00
听懂了吧,那么但是其实呢,我们也可以什么具体给他设置一下,当你出现什么异常以后回滚,或者说呢,当你出现什么异常以后呢,不进行回滚,这也是我们可以进行设置的,好具体怎么设置呢,我们来看一下啊,我们在这个里面呢,我们需要用到几个诶属性啊,给大家写一写好比较多啊叫做什么roll back。好,这是其中的一个。OK,再来写啊,然后呢,Back for class name啊,这也是一个,它们两个的作用是一样的啊,只不过用的方式不一样,然后再来写,有一个什么呀,叫做no for。好,把它拷贝过来,好,还有一个叫什么呀,For class OK,这个也拷贝过来,来分别解释一下啊呃,上面的这两个roll back for,以及这个roll back for class name,那么就是啊,你可以指定当出现什么异常以后进行回滚,下面的这两个呢,就是来设置一下,当出现什么异常以后呢,不进行回滚。
02:12
理解吧,诶那么这两个,比如说对于他们两个来讲,诶有什么不同的地方呢?注意上面的这个是来指定异常类型的,可拉斯类型的,下面的这个是通过一个字符串来去指定一下你是什么异常的,能明白吧,你看啊,我们可以怎么看呢?你到这个蠢三星头里面去看啊,来找到我们的。你看啊,Roll back for看到没有,它是需要我们去指定一个class类型的,能理解吗?当然啊,它也是一个数组,而下面这个roll back for class name呢?哎,它是需要通过一个什么呀,通过一个字符串的形式来去表示一个什么异常的,能明白吧,所以说呢,就是指定的方式不一样而已,但是呢,它们的作用呢,都是一样的。好,那么接下来呢,就来给大家去简单的演示一个啊呃,我们演示谁呢?就演示一个呃,No robot back for吧,啊也示一个他啊,啊也示一个什么异常呢?注意了啊呃,对于这个数组来讲,你看了哈,刚刚不是说过吗?啊,我来点进去看一下啊,大家看刚刚我们能看到它是一个数组吧,对吧?那么对于这种数组的这种格式,呃,这个属性来讲的话,我们在这个位置写的时候呢,有两种写法,第一种写法,如果说诶,你只给他指定一个元素啊,就是我只有一个元素,那么你直接在这个后面跟上就行了。
03:33
听懂了吧,如果说你想指定多个,那怎么指定呢?哎,你就使用一个大括号,然后呢,在这个大括号里面呢,你就可以去写上多个了,当然你写一个的时候,你也可以使用这种方式的,OK,那比如说你看了哈,呃,我现在呢,想模拟一个问题,什么问题呢?我看看大家还记不记得啊,就是我们在一开始讲这个事物的时候,就是还没加事物之前,我们会存在一个问题,还记不记得什么问题啊。
04:02
就是呃,库存够余额不够是不会有一个问题啊,然后呢,或者说呃,余额是够的,但是库存是不够的,是不是也存在一个问题啊,对不对,还记得这个问题吧,OK,那我们就来研究啊好,现在我加上了这个事了,对不对,那我就去演,演示什么呀,演示你的库存是够的,但是余额不够的情况下。我们当初会出现一个问题,就是什么呀,库存是不是也会减了呀,对不对啊,那么我们加上这个注解以后呢,那个问题就解决了,那是因为什么呀?因为你抛出异常以后,他是不是给你回滚了,好但如果说现在我不希望你进行回滚,那我就是在这个位置呢,可以给你设置一下,他会抛出一个什么异常来呢?叫做什么余额不足的一个异常吧,对不对,OK,那我就设置了啊,叫做什么呀?哎,User account except加class,我就告诉他,当我的这个方法中抛出了什么呀。
05:01
抛出了这个余额不足的异常的时候,它是不进行回滚的,那么大家来分析,我先把虽然说这个在一个事物里面,但是呢,我先把这个呢给他干了什么事啊。是不是给他减少了一个库存啊,然后呢,当我再去减这个余额的时候,他抛了一个异常了,但是呢,对于这个异常来讲,我设置的是不回滚,那么我们也就能看到什么现象了,库存这样了,明白吧,来设置,呃,测试一下啊,加上它以后呢,我们找到我们的测试类啊,找到测试类,然后呢,我们直接去测试谁呢?测试这个check up啊,不是测试它,测试这个by book就行了,能明白吧,来测试它啊,好,我们先看一下我们的数据库。呃,先看一下余额,余额呢,现在有表数据啊,来看一下这个余额,余额呢,现在有这个50块钱,看到了吧,那么你去买任何一本书肯定是买不起的,对不对,OK,来看一下这个库存表啊来我把这个库存呢,还是都改成十,我们好看一点,看明白了吧,都改成十,接下来呢,我就来去演示这个啊,来测试。
06:15
好,走一下。好,那么首先我们能看到这个余额不足吧,对吧,那么正常情况下你余额不足,那么你是不可能买成功的,但现在我们再回到数据库里面,我们来刷新一下,你看这个是变成九了对不对,然后呢,这个位置呢,还是50块钱,那为什么出现这种现象了呢?这是我刚刚给大家分析的啊呃,在这个方法里面,虽然说你在一个事物里面,但是呢,诶他成功了,他也成功了,但是呢,他失败了,而我们设置的什么呀,当你出现了这个异常以后,就是我们的用户余额不足的这个异常以后,他是不回滚的,那么他就不会把这个给你做回滚了,也就意味着这个操作就其实已经成功了,听懂了吧,所以说呢,诶我就通过这样一个呢,给大家做一个简单的演示,你知道他们怎么去用就行了,明白了吧,这就是我们要讲的第三个属性,事物的回滚与不回滚啊,其他的我就不再给你演示了啊,下去以后呢,大家可以自己去把它试一试啊。
我来说两句