00:00
好,那咱们的表创建完之后,下面咱们就来把咱们实现的过程呢来写一下。首先呢,咱们先把咱们的组件来创建出来啊,然后先把这个controller service和dau创建出来。Controller,然后来创建一个类啊,然后叫做book count controller。行,那这既然是咱们的控制层组件,那所以咱们要加的注解,那肯定就是A的controller注解,然后下面我们再继续往下写,然后来创建咱们的service service.book。Service,这是一个接口,然后再来创建它所对应的实现类,就I'PL点,然后book service,然后IMPL行,然后咱们需要让他去实现一个book service接口,然后同时呢,它因为是业务层,所以咱们要加上一个a service注解。然后再来创建咱们的DAO层,叫DAO点,叫做book DAO OK,行,然后下面咱们再来创建它的实现类,所以说以后咱们到底是如何来使用这个spring中的IOC功能的,其实很简单,你像我们创建的三层架构,就是大家在各个组件上加上相对应的注解,然后呢,把我们当前需要来进行赋值的这个属性呢,进行自动装配就行。
01:22
OK吧,行,然后下面咱们这是book DAO I m PR,然后你每创建一个组件呢,就把这个注解记好,把它给加上就可以了,养成习惯就行啊好在这咱们是repositatory OK,完事,大家再检查一遍,你看咱们的注解是不是都加上了,但是咱们要通过注解来管理组件的话,咱们除了注解是不是还得进行什么呀扫描,所以说咱们来找到咱们的配置文件,然后在这儿呢,咱们把这个扫描组件,然后给它加上啊,行,然后咱们用到的标签呢,是comp comp sc,然后咱们扫描的包是,Com,点爱的硅谷,点spring,因为在这下面咱们的control service,还有DA包下面是不是都需要进行扫描,OK吧,然后再往下,那controller里面咱们需要用到谁呀?
02:09
是不是需要用到咱们的book service对象,然后来进行自动装配,大家注意就完事了,OK吧,然后来写个方法。叫做VO,叫做by book,好,然后大括号,那我们买书的时候,咱们怎么买呢?咱们是不是要知道谁买书,我们要我们也要知道你买的是哪一本书,所以说在这咱们把这个user ID传过来。对吧,然后再把我们当前ineg类型的book ID传过来,大家注意啊,咱们就这样去写模拟一个功能啊。好,然后下面咱们来调用book service,然后点by book,然后括号把咱们的user ID传进来,然后把咱们的book ID传进来就行啊好,下面呢,我们在service中来创建这个方法,这是干啥的?这是买书的操作啊,就是买书好下面来找到它的实现类来对咱们的方法进行重写啊,那在我们的service中,咱们是不是就要来访问数据库了?所以说在这咱们需要干什么?来创建咱们的持久层的对象,叫做book dou,同时然后进行自动装配。
03:21
就完事了啊好,那这个过程咱们应该怎么做呢?咱们在上一个视频中呢,就跟大家说了,我们现在买书的操作一共三个步骤,首先第一个步骤。然后叫做查询啊,叫做查询图书的价格,然后咱们的第二个步骤,然后我们需要来更新图书的库存,库存,然后第三个步骤,然后我们要来更新,大家注意这个用户的余额啊,用户的余额。余额。行余额啊行啊好,大家注意一共这三个步骤,那咱们就开始写呗。首先大家看好,在这来调用book DAO点,叫做get price get price,然后by book ID by book ID是根据图书的ID来查询图书的价格。
04:14
把谁传进去,把我们当前的book ID传进去,那它的返回值大家说是不是应该是一个int类型的price啊,因为咱们没有用double类型啊。我们直接在咱们当前的数据库里面来设置的就是什么呀,大家看你看这个price是不是也是int类型对不对,所以说咱们直接设置为int就可以啊。好,再往下更新图书的库存,那咱们直接访问d book DAO中的什么叫做update s tok stock,然后把谁传进来?比如说咱们默认一次只能买一本。那所以咱们是不是只要把图书的ID传进来就行,对吧,最后一个更新用户的余额叫做book DAO,然后点大家注意叫什么叫做up date balance balance。
05:05
Balance就是余额的意思,然后那我们现在咱们都需要知道什么条件。我要知道我更新的是哪个用户的余额,所以说要把user ID传进来,咱们是不是还要把我们当前咱们的这本图书的价格传进来呀,对不对,所以说我们现在咱们一共是这三个操作,大家看咱们首先呢,把这三个方法呢,咱们一个一个的都创建出来啊来。好,然后再来找到咱们的第三个方法,这三个方法分别都是干什么的?首先第一个这个功能是干什么的,是不是应该是根据咱们的图书的ID来查询图书的价格。然后咱们的第二个方法,然后是不是应该是更新,然后用更新图书的库存,库存。好,咱们的第三个操作。然后是更新用户的余额,OK啊叫做余额行好,然后咱们再来找到咱们的时现类,然后来对方法进行重写啊,那大家说这个时候我们需要怎么去操作数据库,因为我们在咱们的配置文件中,咱们配置的是不是有个gd bc tempate,那咱们也说了,咱们测试事物功能的时候,咱们就是来使用JD bc template执行SQ语句的过程中来测试的,对不对,所以说。
06:27
我们在这咱们是不是只需要来创建一个叫做gd bc template就可以了,OK吧,然后在这咱们直接一个自动装配就行。好,大家来看啊,G d bc template LC容器中有没有有啊,在咱们当前的配置文件中是不是有这样的一个病,对吧?然后那我们现在直接自动装配能装配成功吗?没有任何问题,直接通过类型就能装配成功,因为在IC容器中只有一个类型,只有一个gd bc template类型的BOK吧。
07:00
好,那下面呢,咱们就开始写呗,首先先写circleql语句,还记不记得JD bc template如何去查询,如何实现查询功能,比如说这个是查谁的?你根据book ID查询出来的一定是一条数据,而我们现在咱们查的是不是只有我们这个图书的价格,所以说在这咱们这个查询出来的就是单行单列的数据,大家注意啊,所以说circle口L语句大家看怎么写啊,叫做select price,看好了啊,然后select price,然后from t_book然后while book_ID等于问号。大家看一下,你看咱们当前的图书的ID是不是叫做不可下划线ID,没问题吧,行,然后那我们就可以在这来调用我们的t d bc temp中的方法了,哪个方法query for object有印象吧,把circlel语句传进来,把我们当前要查询的这个数据要转换的类型,也就是咱们的ineg.class ineg.class传进来,然后最后还有一个就是我们当前为占位符所赋的值,把book ID拿过来就可以啊。
08:13
这个大家注意看好,这是SQL语句,这是我们当前咱们要转换的什么,我们查询出来的数据要转换的Java中的类型,然后这个是我们当前咱们的这个要为占位符所赋的值,就是这个不可ID啊。行,大家看,你看我们现在所用的方法,是不是这个跟我们之前咱们用的是一样的,对不对,然后再往下更新图,更新图书的库存,String circle等于双引号,然后是update,表名西下划线,Book,然后set,我们要去修改谁要修改我们当前的库存,库存这个字段叫啥叫sto,大家看一下啊。在这个地方。好,所以说我们是不是应该是setto,等于咱们默认一次只买一本,那是不是应该是stock减一。
09:04
能看懂吧,你能不能在这来写一个叫做stock,然后减等于一,叫做减等于一,加等于一,大家都知道对不对,然后呢,咱们有加等于一,减等于一,乘等于一是不是都可以。但是在这有这个功能吗?大家注意没有这个功能啊,咱们的my circle里面它是没有这种语法的,知道吧?好,然后再往下再加上条件while book_ID等于问号,然后下面咱们再来调用JD bc template中的什么方法来实现修改啊?Update方法,把SQL语句传进来,然后把我们当前为占位符所赋的值传进来,也就是咱们的book ID就可以。行,然后再往下,然后咱们的最后一步叫做修改用户的余额,好circle语句string circle等于双引号,然后在这怎么写怎么写,大家看好,Update表明其下划线U点。
10:01
然后set,我们要去修改谁要修改balance balance这个字段。对吧,然后减去谁,那我们当前啊,Balance等于balance balance减去谁,减去问号,我们当前传输过来的价格是多少,那余额是不是就得减多少,对不对,然后最后well user_ID看好啊,用户表里面的用户ID是U_ID啊U_ID等于问号完事,CD bc template,然后点update的方法。Circle语句放进来,然后第一个问号应该是price。然后第二个问号是不是应该是user ID OK,大家注意,这就是我们当前实现功能的整个过程。那下面呢,我们是不是就可以来进行一些测试了,比如说我们现在咱们让用户,因为咱们只有一个用户啊,咱们让这个用户ID唯一的用户。然后呢,去购买我们当前这个图书ID为一的图书,那大家看它的库存是够的,但是我们当前咱们的余额够吗。
11:08
这本图书是80块钱。但是当前用户的余额是不是只有50,那我们现在咱们就来测试一下,没有失误的情况,大家来看一下啊,那我们现在怎么做呢。来创建一个测试类。好,然后这个咱们叫做TX。叫做TX by not ion叫做通过注解来实现的声明是事物,然后test。OK,怎么做,那我们之前是不是学过这个spring和unit,所以说咱们现在还可以这样啊A。Run with,然后SP unit unit4class class,然后再通过咱们的contact的conguration来设置咱们spring的配置文件。首先class pass1定要设置上,然后再往下来找到我们的配置文件,是TX杠、on,点叉ML完事。
12:06
那咱们都知道spring整合了几unit之后,我们可以干什么?咱们现在是不是可以直接通过自动装配的方式来访问我们当前IOC容器中的病,对吧?那我们要访问谁啊,大家想一下。我们现在是不是来实现的是一个完整的过程,从controller到service,再到DA。所以说我们现在咱们只需要来获取user control对象就可以啊,叫做book controller啊book control,然后book control行,然后下面呢,我们是不是就可以来写一个测试方法来进行测试了,Public,然后word叫做test by book好。然后我们直接来调用book control里面的by book方法,咱们说了要让用户ID。唯一的用户。来买我们当前咱们的图书,ID为一的图书,好,下面大家来看,咱们再来看一下咱们表里面的数据,大家看好啊,这个用户是ID为一,他的余额是50,咱们要买的图书呢,是图书ID为一的图书。
13:13
它的库存是够的,但是大家看一下它的价格是不是比我们当前用户的余额还多,对不对,所以说我们现在来执行一下,大家观察一下这个结果啊。好,大家看直接报错,报的什么错,咱们直接往下看啊,拉到最后。大家看一下在这是不是直接就给我们了一个叫做my circle什么data transaction对吧,什么意思。他说我们当前咱们的这个数据啊,T截段应该是应该是这个意思啊,Triet是截段的意思。他说我们当前咱们的big in,什么an sand是无符号的意思,对吧?然后value is out of RA,然后说的是超出范围的意思,在我们的哪个表里面,其下划线U中哪一个字段,Balance,咱们给它附了一个值是什么?叫做负80。
14:11
对吧,减80不是负80对吧?好,然后那我们当前咱们减完80之后,大家说你最终的结果,你看他原来是50块钱,咱们现在减80之后,现在是不是就变成30负30了呀,但是我们是不是给这个字段设置了一个无符号,那所以说它能是一个负数的值吗?不能,所以说最终咱们的结果就超出了范围。好,那我们下面呢,咱们来看一下,因为我们现在是没有什么没有事物的情况,那所以大家想最终的效果是什么呢?那我们在买circle里面啊,在它默认的情况下,我们当前咱们的一个circleq语句独占一个事物且自动提交,所以说我们当前没有设置事物的情况下,我们的三个S5句都是独占一个事物且自动提交的。那所以大家想,你看咱们在这儿一共是这三个操作,你的这个操作执行成功了,这个操作执行成功了,对吧?那你第三个操作失败了,但是他自己是在一个事物中的,那我们当前的这个操作失败了,会对这个会对我们当前这个操作所对应的事物有影响吗?不会,因为这个事物大家注意它已经提交过了,在my circleq里面,大家要注意它默认的情况,一个circleq去独占一个事物,且自动提交。
15:28
OK吧,所以为什么我们在实现事物的过程中,你一定得先把什么事物的自动提交给它关闭掉,为什么?因为如果你不关闭,那每一个SQL语句是独占一个事物的,OK吧,行。那好,那下面咱们再来观察一下数据库,大家说会有什么样的变化,我们更新图书的库存能不能成功可以,咱们更新用户的余额能不能成功,不能。他在这咱们是没有加事物的,所以说大家注意,该成功成功,该失败失败,因为他们各自独占一个失误啊好,下面大家看好了,你看这是我们的图书表,下面我们来一个刷新,大家看库存是不是更新了,咱们再来看用户表,这是不是还是50,因为他买不了。
16:13
我们给balance设置的一个是无符号,那无符号也就是说这个字段的值不能是负数。对不对,只能是大于等于零的,所以说他从数据库层面来说,它就给我们抛出来了一个异常,那我们现在是不是就要利用这个异常。然后来实现一个这个咱们事物的一个回滚的功能,为什么?因为你不可能说我当前这是一个完整的操作,结果你该成功成功,该失败失败,那大家想想这还是一个完整的操作吗?就不是了,所以下面咱们就把咱们的声明式事物呢来给它加上,大家注意,这个时候我再说一遍,这个时候我们用的是没有失误的情况,所以在买circleq里面,它默认情况下,一个circleq去独占一个失误,且自动提交。所以说你的这个S口句失败了,这个SQ句成功了,而这个SQ句失败了,那我们下面这个失败的会影响上面咱们这个成功了吗?不会,而我们只有把它们放在同一个事物中,然后我们才可以通过事物的代码去操作它,如果它有异常,咱们就把整个事物都回滚,那这个时候就是要么都成功,要么都失败的情况,OK吧,好啊。
我来说两句