00:00
好,那我们刚才呢,咱们通过一个简单的代码呢,然后来测试了咱们的修改冲突问题,好,那最终的一个结果呢,咱们查询出来的一个商品的价格呢,是70,那这个呢,肯定是不行的,这个大家都知道,然后我们在真正开发的过程中,这种问题一定是不能出现的,对吧?那我们要想来解决这个问题的话,那我们应该如何去实现,好这个时候我们就可以通过乐观所来实现来解决这个问题,对吧?那首先大家一定要知道乐观锁的实现流程其实很简单,之前呢也跟大家说过,然后每一次咱们在查询的时候会查询当前的版本号,每一次在更新的时候,我们都会在原来版本号的基础上来加一,然后并且把咱们之前所获得的版本号作为条件,然后来进行匹配数据,那所以说只要我们在操作的时候,版本号一旦发生了变化,也就是我们在操作的时候,然后之前已经有用户对这个数据进行了更新。那大家。
01:00
说我们当前的well条件还能匹配到之前的数据吗?就不能了,对吧?好,那我们的my beat中的my beatt plus中的这个乐观锁该如何来实现呢?非常简单,首先呢,大家来看,我们来找到咱们的实体类,咱们在实体类中把我们表示乐观所版本号的这一个属性来加上一个注解,叫做a version就可以了,大家注意,这个是用来标识什么呢?用来标识咱们的乐观锁对吧,版本号字段。OK,字段字段OK啊好,那我们现在咱们把它给设置完成之后,然后大家想它是一个插件,那大家记不记得我们做分页插件的时候,咱们是不是专门来指定了分页插件,那所以说我们在实现咱们的乐观锁插件的时候,咱们也要来在我们的配置类中来进行设置,叫做a in the intercept叫什么?叫做optimistic lock in the intercept OK啊,行设置完成就可以了,大家看这个是用来添加什么的,添加乐观锁,然后插件OK,好,那设置完成之后,我们就可以重新来测试咱们的功能了,那大家想现在这个功能。
02:18
大家说最终咱们的产品商品的一个价格是多少,大家能想到吗?应该是多少呢?应该是150,大家说是不是来下面我们在这儿咱们执行一下,当然呢,我们之前咱们是不是把这个数据呢给修改了,然后现在咱们再重新把它给改成是100,来方便我们来进行测试,然后下面呢,大家来看现在它的版本号是不是零啊好,我们来执行一下这段代码,然后大家就能够看到相对应的结果了,但是最终的结果是我们想要的一百二这个结果吗?也不是,为啥,因为小王呢,我们用了乐观锁之后,小李改完版本号变了,那小王在改的时候,大家想想版本号是不是就匹配不上了,对不对?所以说来咱们看最终的一个结果,然后结果是多少,一百五没问题,好,那我们下面咱们就来看一下咱们所执行的一些SQ语句,首先大家看小李查询的商品,100没问题,然后再来。
03:18
看小王查询的商品的价格也是100,再往下小李要加50了,那他在加50的时候,他是怎么加的,大家看一下。修改我们当前咱们的这个商品,然后name是外星人笔记本,然后价格是一百五加了50对吧,然后version大家来看变成了甲,是变成了一啊对不对,那这个一是什么?是不是我们当前在原本的版本号加一之后的一个结果,对不对,因为原来是零,大家看一下数据库,现在咱们还没有刷新啊,所以说数据库中的版本是零,那每当咱们在进行更新的时候,是不是都会将咱们的版本号在原来获取的基础上来加一,然后再往下大家看在这版本号是不是也是一个什么,也是一个条件,那所以说大家想我们之前获取的版本号是零,那我们现在咱们作为条件判断的时候,版本号是不是也是零,那所以说这个SQ去能执行吗?可以执行,所以说小李的更新操作成功了没有啊,成功了,但是下面咱们再来看小王的操作,大家看。
04:25
设影想的行数是几啊,是零,为什么是零呢?因为版本号现在已经变成几了,已经变成一了,但是小王在操作的时候,他作为把版本号作为条件判断的时候,它判断的是解是零,为什么?因为他之前获取的就是零。这个大家能看懂吧,所以说小王的修改操作有没有被执行啊,没有被执行,所以只有小李的操作被执行啊,所以咱们最终所获取的一个价格就是150 OK,这个大家注意。
我来说两句