00:00
好,那我们刚才在我们测试的基础上来添加了我们的一个乐观锁插件之后,然后我们当前咱们的修改是不会发生冲突的,然后但是大家也能够发现一个问题,小李的修改执行了,但是小王的修改执行了吗?没有执行好,那我们下面咱们就可以把咱们的代码呢,然后来进行一个简单的优化,大家来看咱们来进行优化呢,很简单啊,比如说大家看好这个是不是小王,然后将商品价格减了30,然后这个时候我们是不是可以来获取一下当前小王操作的一个结果,咱们就叫做result,对吧?那大家想只要小李操作成功了,那小王他就没有办法再操作成功。那所以说我们是不是可以在这个地方干什么,来判断一下当前小王操作之后的一个返回值,也就是受影响的行数,如果当它恒等于零的话,大家说这是什么意思,是不是应该就是操作失败,那操作失败之后怎么地重试,大家注意,那怎么重试,那其实很简单,咱们只需要重新来获取这个商品信息,然后再重新进行修改就可以,大家注意啊好,那在这呢,我们怎么写啊,一样的操作,Product map,然后点先来查询,大家注意,在我们的乐观所里面,你一定要先把咱们的这一个版本号给他查询出来,然后select by ID,然后再来进行查询,然后查询完之后,大家看在这咱们是不是可以来获取一个。
01:37
咱们在这是不是可以获取一个product的,比如说咱们在这获取的叫new,然后获取完成之后,我们是不是在重新获取的基础上,然后再减去30,然后再重新修改是不是就可以,对不对?好,Product new,然后点set price product new product new,然后点get price,然后再修改了基础上,然后再减去30 OK,完事,然后下面咱们是不是再进行修改就行了,Product map.up by ID把product new放进来,OK,这个时候大家想应该没有问题了吧,对不对?因为既然操作失败了,那我们现在重新获取版本号,在我们小李操作的基础上,然后再进行一次修改,减30应该就没有问题了吧,这个大家注意啊,好,那我们下面把咱们的数据呢,咱们再来重新进行一下修改,咱们的版价格还是100。
02:37
版本号咱们还给它设置为零,OK,然后下面呢,我们来测试一下,大家来看啊,好,这个时候应该就没有问题了,对吧,因为我们现在呢,咱们进行了一个操作失败重新操作的过程,那所以说版本号就会重新来获取,然后咱们修改的时候,那我们是不是应该是当前修改的数据的版本号跟我们之前获取的是一样的,因为在这中间是没有其他的用户来操作的,OK吧。
03:06
大家看一下最终获取的是不是一百二啊。没问题吧,咱们再来看一遍咱们的SQ语句,大家看好,首先呢,然后是我们小李查询出来的价格是100,小王查询出来的价格是100,然后呢,他在进行更新的时候,小李更新完之后将版本号更新为几了,是不是更新为一了,在这儿呢?啊,大家注意这个指的是咱们的版本号,然后所以说小王在进行更新的时候,Well,条件还满足,满足了不满足了,因为版本号发生了变化,小王之前获取的版本号是零,而小李修改完之后就把版本号修改为一了,所以说条件不满足,那小王是不是根本就没有去进行修改,然后再往下,那我们在这儿咱们是不是怎么做了,咱们在这儿是不是重新来进行了获取,获取完之后,然后咱们又进行了更新,那这个时候我们所获取的版本号就是一,而我们当前作为条件来进行判断的时候,那版本号也是一,那所以说大家看,那这个时候小王就操作成功了啊,那最终呢。
04:09
咱们是不是就可以把商品的价格修改为120,好,这个就是我们通过乐观锁,然后来解决。我们当前修改冲突的一个问题,好,那这个过程呢也非常简单,咱们只需要在咱们表中的字段呢,来设置一个叫version的字段,OK吧,好,然后呢,把我们相对应的实体类中的这个属性上来添加一个version这个注解就可以了,然后再在我们买be plus的一个插件中添加乐观锁插件就可以,所以说my be plus中的乐观锁插件使用起来还是非常简单的啊。
我来说两句