00:00
好,那接下来呢,我们就来去测试一下我们刚刚写好的这个程序啊,来我在我这个再去新建一个package,我们就叫做test啊测试啊,然后在这个包下面呢,我们去用一个类吧,啊就是test我们的。好,请啊,这是我们的事物,来finish好,大家来注意,呃,那么现在的话呢,我们要去测试谁啊,Public,好好测试我们现在写好的这个程序啊,那就是啊测试我们的事吧,TX啊,是我们把它叫做TX,然后呢,加上我们的注解啊at,我们的TSOK,呃,然后因为你要测试嘛,所以说你肯定是要用到你的这个service,用到你的什么DAO的对吧,这些都得用得到的啊,所以说呢,我们就直接啊在这个位置呢,给大家去声明一下啊,我们先把这个呃,Bookho DA啊bookho DA给它定义出来。
01:06
啊DA,其实我们好像用不到哈,来都定义出来吧,啊什么啊。OK book括service来定义出来,然后呢,我们再去写上一个方法啊,就是N方法,OK,加上我们的住金啊,这个应该加个before是吧?啊,Before加到这好,然后这里面的话呢,我们先去实例化我们的容器对象啊,Application contact,然后ctx,等于你有一个class pass class量application contact,这里面呢,我们写上spring,减上我们的TX长秒是它吧,看一下啊,诶,没问题,就是它啊,然后呢,再把我们这两个对象呢,给它获取到啊,Bookshop DAO。好等于Ctx.get b,那么你在get b的时候,它叫做什么呀?Bookshop DAO是带的呀,能理解吧,Booksh DA class好写到这,然后下一个就是我们的booksh service,好等于ctx get并啊就是我们的bookhop service,好,Bookhop service叫大写啊零大写看懂了吧?OK,来注意了哈,接下来呢,就要给大家去测试了啊呃,那么现在我来说这样的事你看了啊,我调用book of service.by book,我是不是去买书啊,能理解吗?哎,我要去买书了啊,你看我买什么书呢?呃,我先去通过Tom这个人啊,我去买一本1001这一本书。
03:00
可以吧,101这一本书,那么大家来分析啊,现在我去买的时候,大家来看数据库里面的这个表啊,它总共有300块钱,而1001这本书呢,它卖100块钱,并且呢,它的库存是十本,各方面都是满足的吧,对吧,那我们就来测试啊,所以说你看了啊,我来运行一下。报了个错是吧,看什么错呀。SL语句出问题了是吧?啊,Where are username等于什么?他说有个user有个SL语句的错误啊,我们看看是哪个地方,Select where username等于什么是吧?看看这个地方打错了啊,来,我们改一改应该这个地方吧。这个地方出问题了,来看一下跟什么对不上了哈。Balance balance没问题啊,查询balance from这个表,We are username等于一个问号,没有给人家参数是吧,是不是啊,啊,没有给参数啊,我们给个参数这样就行了吧,啊,来吧,再来测试一下啊,那么现在我们再来看看这个效果来测试。
04:18
嗯。好,现在就没问题了啊,然后呢,我们看数据库里面啊,先刷新它剩200块钱,然后呢,主要是看这个库存表哈,剩了800了,为什么剩八分了呢?因为刚刚那一次错的那一次他已经减完了,对吧,他已经讲完对吧,其实这个就是我们存在的问题啊,好没关系啊,先这样吧,我还是把它改回成十本好吧,还是改成十本,我们再来测试啊,那现在他就剩剩多少钱了。200块钱是吧,啊,那我再买100呗,你看好了哈,再买一次还是多少钱。来看数据啊,刷新一下900了吧,然后呢,这个家伙还剩100块钱,OK,我换了啊,我不买这个贵的了,我要买1002了,卖多少钱,70块钱吧,好,这个肯定也是没有任何问题的啊,微信一下大家来看。
05:15
看数据库里面刷新一下,还剩30块钱,然后呢,呃,库存表里面的,你看是不是都是900啊,OK,好,接下来大家要注意了啊,我不管买谁,买1001也好,买1002也好,都买不起了吧,是不是,但是你注意运行好,首先呢,他告诉我肯定是余额不足了,这个没有任何问题吧,但是我们来看数据库里面的表啊,大家注意,呃,我们先看这个余额是30块钱,没有少吧,但是呢,我们回到这个库存里面来看一下,你买的这个1002,它少了一本,刚才是九本吧,啊,那少了一本,那么这就是我们现在存在的一个问题,什么问题啊,钱都不够了,但是我能把书给你买出来是吧,对不对啊啊,就不管你能不能买出来吧,反正你数据库里面的数据是不是已经被破坏掉了,OK,那么分析一下吧,这个问题是怎么导致的呀。
06:15
好,那我们调用的是谁?我们调用的是哪个方法呀?我们调的是service里面的,调的是这个方法吧,那肯定问题就出到了这个方法上面了吗?那你就来分析一下吧,为什么会有这个问题啊,为啥有这个问题啊啊更新库存在更新余额的上面。是这个原因吗?呃,那如果我说我把他们调一下对吧,注意了哈,现在的问题是什么呀,现在的问题是钱不够,但是呢,库存减了。
07:01
对不对啊啊,那你们希望把它调过来是吧?那调过来的现象就是什么呀?库存不够,钱减了,还是掉回去吧,是吧,起码我的钱没少,对不对?能想到那个问题吗?对吧?当你库存不够的时候,但是我先把钱给捡了,捡了钱以后我减库存的时候,他告诉你啊,我没有这本书了啊,然后但是你钱已经给人家了,对吧?这个问题更严重啊,还不如第一个呢,不花钱我就能把东西买出来。对吧,所以说呢,这个地方它并不是说谁写到前,谁写到后的问题,而是你就没有把这三步操作当成一个事物来去对待,你想想你买一本书的话,库存减了,钱减了,对吧?这些操作我们不能把它单独去执行,而是要把它放到一个整体里面,库存减了,钱也减了,都成功了,那么你才能成功。假如说我库存减了,但是发现余额不够,诶,那我们就要把它回滚回去,或者说呢,我余额先减了,但是我发现库存也不够,那我也要把它再回滚回去。
08:09
能明白这个意思了吧?所以说最根本的问题不是说谁前谁后,而是什么呀,而是你压根儿就没有给人家把这个放到一个事物中,听懂了吧?哎,这就是我们的根本原因。好,那么分析出来问题以后,接下来我们就可以使用的声明式事物来去解决这个问题,OK。嗯。
我来说两句