00:00
那么同学们,下一个图书列表我一定把它展示出来的,下面一个我要做的功能是什么呢?我要做一下,这个叫加入购物车。啊,那么在做加入购物车之前呢,其实我们这个首页面的最上面归到这。它这个地方啊,显示,如果我是登录的啊,如果我是没有登录的,它显示成这个样子。如果我是已经登录的,它不是这样显示的。它会显示欢迎谁谁谁已经登录,我们在这个上面代码也是有的。在这如果是没有登录的情况。啊,就显示成这个第二位,你看一下显示成这个第二位。如果是已经登录的情况,它就显示下面这个div,这两个div所使用的样式都是相同的,说明它们是平行的,是平行的是吧?哎,就是这样。啊,所以呢,是这个啊是这个,所以呢,我们进来判断一下你当前是否已经登录,我们怎么判断你当前是否已经登录呢?我们是不是这边有个登录,我们会往三线里面扔一个叫卡的user。
01:04
那我判断的依据就是在线里面到底有没有看中的user了,如果有就表示登录成功,如果没有,那就表示没有登录。直接访问的首页行吗?同学们,我们要做一个判断。所以这个创立接咱们把它改到改成一行啊。这显示多好好。然后把这个放到这那行啊,这样应该差不多。OK。好了,这个是没有登录的时候,这是这个第二遍啊,所以我们这边写一下。TH冒号if,我们加个if就可以了。然后呢,我这边写一个叫Dollar,大括号叫3.currentuse,如果等于等于now是不是表示为空啊。哎,如果你为空的情况下,你就给我显示这一坨。所以下面这个叫登陆后的风格啊,这个猪是咱们不删啊,这个把它放在这。那下面这个我要把注释。
02:00
把它去掉啊。稍等一下。好,删一下。拿这个把它删掉。就这样子把它全部删掉,OK。那么这个是登录成功的所显示的一个div。好,没问题,所以呢,我就在这个地方呢,我就写个叫TH冒号unless是不是啊,我写个unless,我们说过你这个if和这个unless之间不能有其他的标签吗?那这个我认为我有点怀疑,我连注释我都不放过,我就把它放在里面,那这样它和它不就是平级的吗?是紧挨着的或者叫相邻的吗?是不是同学们,那这个unless应该就能起作用了啊,然后把这些图拷过来,根据LCCT,据LV可以吧?如果你为空显示上面一段,否则我就显示下面一段对不对?那行,欢迎你谁谁谁这个地方我这边写成TH冒号text等于是不是应该是Dollar大括号三,先点current user,点它里面的名字。
03:10
名字是啥?是不是叫UN name?可以了吧,同学们就这个。好,注销先不管它这边要显示购物车哦,这边要显示购物车的那个数字是吧,购物车里面到底有多少个,咱们一会儿再说。我们先试试看。啊,现在我把它改过来了。我们先试试看这个首页啊。我现在呢,我在后退回到登录页面,我们刷新一下。被我停掉了是吧,被我停掉了。好让他再启动一下啊。
04:15
看一下啊。应该没啥问题,咱们来看一下。还没启动好啊,还没有启动好。刷一下怎么会没有启动好呢?难道是有什么问题吗?不应该啊,停掉。再启动一次。那行吧,这个就放着啊,我们再继续吧,下面我要做的是点击添加图书啊,添加了购物车。也就是。往下走啊,往下往下。好在这也就是这个加入购物车,这个加入购物车我们最好写一个TH冒号on click。
05:00
当我点击的时候嘛,行吧,同学们,当我点击的时候on click。当我点击的时候,我就用一个JS方法叫ADD cut。啊,第二个JS方法,那我也得加个竖线。表示这里面全部都是普通字符串,然后。在这里面你加入到购物车,你肯定要把某一本书加入到购物车嘛。那我肯定要需要那本书的ID嘛。所以星大括号。然后是不是叫ID啊。对的吧,这个叫ID没错。啊,就是我们这本图书嘛,图书他的ID,将来我就要把这本书加入到购物车,具体怎么加,大家先不着急啊,咱们一会儿去看。我先看一下首页,点击登录。你看是不是有了欢迎谁谁谁有的吧,那我当前这个用户嘛,不就是领吗,好。行,那咱们现在做一下这个功能。那它对应的这个尖子方法嘛,所以我们回到这边来。
06:02
咱们补一个。Script。Javascript。Src等于Dollar,大括号static杠,我记得是叫script,我们写个叫index点七。好,当然这玩意还没有呢啊,找到找到static,找到script是吧,同学们。咱们加个斜杠啊。然后index。列出一个file啊,叫index.js行。然后在这里面我们需要一个方形,叫ADD cut。好,这边我们写个叫book ID。好,然后在这里面window.location.hf啊,我们要我们要发个请求发给谁呢。添加一本图书进购物车,那我想的是我得给购物车的那个controller发个请求。所以呢,我写的是叫卡特点镀老师卡的点读还没有呢,是没有,咱们一会儿再见。
07:05
啊,总之我想给谁发请求,给card controller发请求。问号oper等于at。并且book ID等于一个值,把book ID把它加进去。其实我在写这一串的时候,我就已经在思考了,哦,Cut的点度说明一会儿咱们得写一个cut controller,然后我在写opera的时候,我得知道,哦,Cut control里面得有一个叫ADD cut这个方法。然后我再写后面这个book ID,我得知道哦,这个ADD card里面的一个参数叫book ID。是吧,同学们,OK。所以我们现在回到这儿。我们写一个cut controller。这里面第一个方法,子俊a cut。好in不ID?是不是同学们,我们得有这个方法,那么这个方法需要完成的功能就是把一本图书添加到购物车里面。
08:00
将。指定的图书添加到当前用户的购物车中。那么它的逻辑是这样的,如果当前用户的购物车中已经存在这个图书了。那么将。这个图书的数量加一。接着将我购物车里面这本图书的数量加一吧。那么将。啊,那么将购物车中。这本图书。的数量加一。第二种。否则在我的购物车中新增一个。他的item笑。新增一个卡item。数量是一,是不是新增一个这本图书啊。这本图书的card item数量是一。我将来做这么一件事情。所以这个涉及到新增,上面这个涉及到修改。
09:00
因此,来。我现在来写do。在这个地方我写个叫卡item d。然后呢,呃,这是个接口,稍等一下啊看一下。Interface。好,然后在这个里面呢,我得写一个叫新增购物车项。Void at car item cut item卡、item就这样的第二个修改特定的购物车项。好,Vod update item。他item。好,我写了俩方法。那么我需要来实现一下这两个方法,回到这边来。Car it de。然后咱们继承best do。Item。好,实现卡item do。是吧?怎么实现这两个方法?好,第一个是添加。那添加的话,那就是呃,XQ的update。
10:09
Update,然后呢,In色的into t杠,Card杠,Item values,第一列是自制列,第二列我记得是不可相关的。呃,让个数量我看一下啊,回到数据库看一下,咱不着急啊看一下。第一个是ID,第二个是book买的数量,然后哪个用户是吧,对了,三个列。好。那所以我给他传参数卡item,点第一个是book是吧,点get ID是不是。第二个是cut item点。嗯,cut.by count吧。购买的数量。呃,第三个是用户呗。点get。ub.get ad对不对?它有三个参数。再来下面一个是修改XQ update update t杠杠,Item。
11:03
Set,我应该set的那个数量呗。它是不是叫by com的呀,看一下啊。因为我经常会搞混啊,咱们图书里面对应的是叫销量叫康的。这是购物车里面的叫这本图书的购买的数量是吧?叫by count,我应该把by count改成一个值啊,Will,我的ID等于另外一个值是不是?所以它点get by count,再来一个卡item.get ID,没错吧,同学们,我们得需要传这两个参数。一个是添加,一个是修改。再来强调一遍,为什么我需要写这两个,因为我这边加了注释。我将一本图书添加到。当前这个用户的购物车当中,无非就两个操作。第一个操作这本书,这个用户之前添加过的。你之前添加过的,我现在再想添加这本书,那不就是把我购物车里面这本书的数量加一吗?如果我当前购物车里面还没有这本书呢?
12:03
那不就不就表示往我购购物车里面新增这本书吗。是吧,同学们不就是这样的吗?所以它其实对应的就是我们图书卡的item这张表,比如说这条记录,一号图书,这本书已经有了,我当前登录假设啊,假设我当前登录的是二号,这本书已经有了。那我再次点击加入购物车,不就把这玩意儿加一吗?那如果我二号用户登录,我想买二号这本图书,这里面有二号图书吗?二号用户,我们是不是没有二号图书啊?那我就在音色的新增一条记录,Book指的是二号,八,Com指的是1USE b是不是指的是二?能跟得上吗?同学们,OK。所以跌,我已经把它写好了。那么我再回到设备支撑。With a service。好,我们来新建一个。叫carter item service。好了,那么在这个当中,我对应的也应该有两个方法,ADD item。
13:04
好,第二个是update item。好,我应该有两个方法。好了,先停掉啊,然后呢,我们得去写它的时间类。啊,其实怎么说呢,我要不就先说了吧,啊,我除了这两个方法之外,咱们最好再写一个方法。ADD or update it。好好好,我也写个这个方法。这方法怎么实现,咱们一会儿再说。行,就这样子。那行吧,咱们写个实现类,把它实现一下cut item service。好实现一下。Carter item service。好实现其中的三个方法。好了,那么他肯定需要DA啊。Private cut item item丢。然后呢,我要添加嘛卡item,第点艾卡item。
14:00
再来修改嘛,他item do。点update,这比较简单是吧,这比较简单好,那这个这个方法怎么实现呢。这方法怎么判断呢?好,刚才我说了判断。当前用户的购物车中是否有?是否有这本书啊,这本书的咔嚓一通。是不是有则修改有对应的,对应的就是update。五。我们对应的就是ad。一个update一个APP,那我得考虑有没有这本书,购物车中有没有,购物车中有没有购物车,哎,购物车。购物车,好像我们当前还没有购物车。是不是啊,行,所以现在我来补一个,回到屁股肌肉类。
15:01
咱们补一个。新增一个,但是这个card购物车内它是不是和我们数据库表没有对应关系啊,它就是个card,好,这是我们添加card的一个理由。另外还有一个理由,同学们稍等一下啊,另外我们需要新增car的这个类,还有一个理由。是因为我先提前说一下,是因为我们在这个页面上,我们后面到购物车项大家看一下。这边共几件商品,总金额是多少?这边还有个总金额,它也算是一个属性。如果我们没有卡这个类,我还需要把这个N多个cut item的集合啊,要去计算一下挺烦的,所以我干脆我去设计一个类,叫卡,叫购物车,然后给到一个属性,就叫总金额。啊,这样会,这样会让我们的这个业务逻辑会更更简单一些。所以我现在新建了一个cut,那这个cut里面需要一个什么呢?第一个map,看好的是map。
16:00
Inagr,我先写完,写完我再给大家解释,Cut at map,我用的是map,然后key用的是inter。行,稍等啊。删掉。好,我们。把它导入进来啊,再来。刚才我说了,还是应该有个总金额。Publishing total money。啊,我就写个叫total money,那我再给一个数量嘛。Inter。To count。就这样吧。我需要一个卡的map,我需要有总金额。购物车。中。购物车项的集合。这个指的是购物车的总金额。购物车中。书的书的。
17:01
数量。这个地方书的数量呢,我想说的是什么呢?我最好把它改一下购物车中购物项的数量。购物项的数量,我打个比方啊,比如说我们在淘宝里面,我们再把把把把商品加入到我们购物车里面,比如说我第一件商品加了两件,第二件商品加了三件,我那个购物车的数字应该显示为数字二,不应该显示为数字五。是不是?就是我那个上面显示的数字应该是我购物车项的数字,而不应该是具体里面有多少件商品的总数量,不是这个是吧,所以说应该是购物项的数量。啊,那这个比较简单,这个total count其实就是它的size吗。是不是同学们啊,就是它的size。好,最后一步,最后一步我再来解释一下这边为什么是intake。好。这个map集合中的key是book的ID。
18:01
这个map集合中的key是不可的ID,我只有是book的ID,我才能判断将来如果这本书我又扔进来了,那我就看一下当前这个集合里面有没有对应的这本书的ID。因为我们map有个方法叫contain key。Map集合是不是有个叫key?Contain包含吗?Keep不就键嘛,是吧?Contain key是否包含某一个键?如果包含,是不是说明当前已经有这本书了?对吧,所以这个K的ID,它对应的是book的ID。好,我先把这个屁股肌类先把它补全了。Cut。好,Get set。嗯,稍等啊。咱们要全部选中三个好,呃,然后呢,我们这个total money,你这个total money的这个get方法在这呢。就不要直接简单的了,我们在这边我们可以来做个判断。啊,在这边我们就可以来做个循环。
19:01
负循环。啊,负循环或者你看啊,我们写个叫if。Card。Map点啊,如果它不等于呢。并且看到map.size大于零。别致里面有数据吗?有数据的情况下,Cut map.ent set。安赛的不就是它这个集合吗?好,我们得到一个叫entrance。然后我们来负循环。Entrance。啊来循环它,那么它每一项每一项其实。都是一个,都是一个安全。Map店安全。好in,然后呢,Cut item,好,我们写个叫卡item安全冒号它。好,然后呢,Cut安点get value不就是一个cut item吗?然后再点get,我要去获取它里面的书。好,我们把它分开写啊,这个叫卡it。
20:01
Item给他。好,然后cut item.get book.get price,这就是价格,再乘以cut item.get叫by count。这本书买的数量嘛,那么我就把这个值加到哪个上面去呢?我就加到total money上面去。回到这边来,To money。啊,默认等于零。我就让这个兔子骂你,默认让他等于零。哎,这边怎么还有问题啊。加va点,但是我给他附的是个in t,真实的0.0吧,好,然后呢,CTRLC回到这边来,等于它。是不是?把它累加上去嘛。最后咱们他嘛,就这样子。啊,如果if不成立,是不是就直接0.0啊。哎,就是这样。啊,这样我就把它写完了。大家可能会觉得这个负循环有点别扭,因为这个安曲大家可能用的比较少是吧,如果你用的比较少,那你就不要写安全set了。啊,你可以直接点出values是不是也可以啊。
21:01
Values不记得它里面所有的value吗?啊,也行的啊。行,这个方法把它写完了,呃,还有一个方法是数量叫get total count。好,我们设置一下偷偷看等于零。然后在这个地方啊,我们写一下。If。If cut map不等了。并且cut map.s大于零。如果是大于零的情况下。Total count等于cut map.s啊,最后return是吧,这样我就把它写完了。好,其他的都都不用管了。那行吧,现在我们再来。再回到我们的service呢,在这我们得写一下这个方法。添加或者是修改,那现在我们这个添加或者是修改啊,我就要考虑了,我不仅有这一个参数了,我还得再一个参数。你要把70,就是把某一项加到某一个购物车里面去吗?所以因此我才需要第二个参数叫cut。
22:03
啊,我得需要一个cut的这么一个参数。那我们的接口里面肯定也需要这个参数回到这了。是吧,把这个项加到这个里面去。就是这样的,再来。所以现在我需要在这边做判断。If cut。啊,不得。并且cut.get啊,这个其实无所谓了啊,如果你cut不等了,咱们就获取一下cut.get cut at map得了它。找到个cut map。好,然后if cut map不等了。如果你不等了,我就要开始进行操作了。如果你等于到if cut it map。得。说明你是空的,是空的,我就溜一个出来。如果你是空的,我就溜一个出来卡map等于new哈希map。
23:00
然后下面再来。If map.contains key。Key card item碟getb碟get ID。这样就表示我当前这个map里面有对应的那本图书。有内向的cut,所以我就可以把它取出来,Cut map.get。然后cut map。点getb.get ID把这个卡把它取出来。啊,把这个cut item把它取出来,好,我这个叫cut item map tap啊,临时的。然后把它点set by count,把它购买的数量加一嘛。ta.get它加一,然后再执行。再执行update,是不是执行update方法呀。好,他的item。就这样子把它更新一下,Update一下。啊,就是这样把它update一下。
24:01
Else。Else就表示content没有吗?那没有的情况下,就说明当前没有这个卡。那我是不就爱的吗?爱把卡把它加进去。好了,这就是我一个添加或者是修改的这么一个方法。这个是我做的是cut,如果不等于那样的情况。那大家想一想。啊,大家想一想,如果是cut,如果得得那呢。如果你购物车,你连购物车都没有。那是不是表示你当前购你购物车里面就没有任何一个购物车项啊。那我就直接执行它。是不是?我就直接执行他,哎,你当前你购物车是空的吗?连购物车这个东西都没有吗。那咱们就得直接新增就可以了。
25:02
这个指的是零。购物车都没有的情况。啊,当然了,我这个cut呢,一会儿我会让他不为难的啊,但是就这个就是一种if else啊,得把这个逻辑结构写清楚,防止有bug。好。那这个方法我把它写好了。现在我们回到肯的里面去,哇,刚才写的好复杂呀。啊,其实不就是这边的一和二吗?那我问你回到CTRL当中,我还需要关心到底是添加还是修改吗?哎,不关心,那是我们的业务吧,那是我们的业务逻辑,他已经封装到service内部去了,是不是好我们的C了,回到这边。Private。Item service。看怎么做意思。然后。这不叫制定啊,叫指定。好,所以一和二这两步剪切,我们应该放到service内部去。是吧,应该放到这边来,其实就是这这句话啊。
26:01
好,所以我们这边调用一下cut item service。点ADD or update是不是对吧?同学们我得定用这方法,那我得需要两个,同学们我得需要两个参数,一个叫cut it。一个叫cut。啊,我得需要这两个参数。那这两个参数怎么获取哦。这两个参数怎么获取呢?帮我想一想。我们想要获取啊,我们想要去得到这两个参数,想要创建这两个参数,首先我们先来看这个cut。我们首先来看这个cut。这个cut是购物车。好,同学们,我现在的想法是,当我登录成功,我们看页面。当我登录成功到首页面的时候,稍等啊。当我登录成功到首页面,除了展示这边的图书列表,然后这个地方还要显示购物车的数量。
27:04
还要显示购物车的数量。那也就是登录验证的时候,我想让他和购物车的数量稍微有点瓜葛。所以。回到user,要么我在login里面,我去拍,我去获取当前用户的购物车。要么我就是在不可control里面去获取当前用户的购物车。现在我更倾向于把获取购物车信息啊放到登录里面去,而不是放到index里面去。我为什么会这么考虑?因为我想的是将来别人有可能没有登录,直接访问首页,这是允许的。我这是一个,我这是一个在线的这么一个书城嘛,那人家一开始人家就是没有登录,人家先不一定非要先登录啊,万一人家没有账号,你还要请人家注册吗?那人家可能就对你这个就不感兴趣。你得能让人家先看到你的首页,先看到你里面有哪些有趣的图书,然后让人家产生这个购买的欲望,那人家可能会去注册登录等等等等是吧。
28:05
所以说首页应该是允许别人不登录就可以访问的。那如果别人没有登录的话,那这个购物车项可能就没办法和用户绑定了啊,所以呢,我更倾向于在登录的时候,我就把这个用户的购物车项进来查一下。啊,进来查询一下。好。所以。所以。我怎么做呢?回到我们的car service。Card service。这个service当中我想写一个方法,同学们。Cut。Get caught?然后给他提供user。加载指定或者叫特定。用户的购物车信息。加载特定用户的购物车信息。
29:03
你给我个user,我就能给你把这购物车信息查出来,我们回到我们的数据库,我们看一下卡item这张表这边是不是user病信息,比如说一号,你看。一号是不这么多。这些都是一号的,那我是不是要把这些信息全查出来,这些信息是不是都最后都封装到那个map里面去。那那个map是不是就在我们看的这个类里面去。所以我要来实现一下这个方法。那我来找到它的视线内,我们再补个方法。这个方法就是获取某一个用户啊,他的他的购物车信息。那么它的实现肯定要依赖于我们的do层。所以我在找了do。DA里面我们再来写一个。获取。特定用户的。所有购物车项。所以list。Cut item get cut item list,好。
30:07
就这样的,我写了这么一个方法,那这个方法其实非常好实现。我们实现一下。其实非常简单,X的query好,Selection from t-cut杠,Item will use bin的一个值吗?是吧?同学们,就这样因病等于一个值就可以了,这样我不就得到一个list了吗?啊,这样我就能得到一个例子。再来,再来。呃,这个list我把它返回到service,所以说。所以说这个方法咱们调用的时候。那就是used,呃,不叫cut item do.get cut item list,把use把它扔进去,这样我就能得到一个list。那下面一步我就需要把这个list转化成一个map,然后最终再把它封装成一个cut。好,所以我写个map in。
31:02
Item,好,Item map等于new哈希map。好,然后呢,For循环for cut item item冒号cut item list。好,然后呢,Item map。碟put,那么这个就是cut item.get book.get ID,这就是key吗?然后value不就是cut it吗?那这样我这个map是不是就准备好了,准备好之后我来新建一个cut。等于new new card,这是不是新建的购物车,那购物车里面是不是有三个属性啊?三个属性,我是不是只要对它进行设置就行了,这两个不用设置吧。它的钙两个钙的方法是不是会自动的去计算。但你调用get的方法是不是就自动计算了,所以它的值计算的话,是不是就给它赋值了啊,所以这个你你这两个属性你就不用管了。啊,甚至于这两个属性的set方法,你就不要。这两个属性都是只读的。哎,咱们讲P结类是不是咱们说过的,我们属性私有,如果有get,有set,那么这个属性就是叫可读写属性。
32:06
如果它只有get,它只有获取,它没有set,它没有设置,是不是这属性就叫只读属性啊,直允许你读嘛,这个机制很好理解。啊,所以你这边有get to money,那你就set to money可以不要吧。是不是同学们删掉不要?说删就删,现在就删,删掉,那这条属性只有get,那就只读属性没问题的。那行吧,咱们准备一下这个属性。所以我再回到service里面去啊,我们有一个cut,然后cut.set cut map,你看它只有一个set啊,然后咱们把cut map把它丢进去。然后我们再return,搞定。这样就搞定了,如果上面这个负循环去查询的时候,如果一个卡item都没有,是不是我们这个cut仅仅是溜了一下。溜了一下之后,但是里面的map是空的。
33:01
是吧,同学们,但是cut不等于空,是不是啊?啊,就是这样的。好了,所以说cut不等于空。其实我这个地方。稍等啊。稍等一下。卡、service。所以说其实我这个else啊,一般情况下它都是不等当的是吧,一般讲它都是不等当,那行好,这个我已经把它写完了啊,这个叫获取购物车项。那么我再回到user的这个登录里面去,如果你user登录成功了,不等于浪了。不等于,那我怎么做呢?我怎么做呢?回到这边来,我不仅登录验证,我还把你这个用户的购物车项把它查出来,因此cut item service cut item,然后cut it service.get cut,把我们use了,把它扔进去,这样我就能得到一个cut。然后这个cut是这个用户他的cut,因此我在user里面看好了,我在这边private cut。
34:03
是不是这个用户他拥有一个车子啊。就这样行,补一下get set。注意我一开始我可没有加这个卡啊,我是写着写着发现,哎,我再加个属性,我把它加进来了。OK,再回去。好,再回到这边来,因此在这个地方,user.set cut cut丢进去。然后咱们把这user把它保存起来可以吧,把它保存起来行。现在我要回到首页面上去,回到index页面。咱们就把上面把把这两购物车上面的数字,咱们把它改成真实的。The index。数字。好,应该是这个数字是不是。就是他。行,写一下吧,TH冒号text等于Dollar大括号。session.current used.card。
35:05
是不是有个叫total count的?哎,对的,宝就这个行。把它铺进去。好了,这是个这是个小插曲,咱们再立即拉回到主线上来,我们要做的功能是添加到购物车。回到这边来。OK。添加,所以说这个cut我应该怎么取呢?这个cut不就是当前用户吗,他的cut吗?那么当前用户他的cut不就是在筛选里面吗。HTTP。再。因此,先点get attribute current user了,是不是能获取到这个user类呀?啊,互相的user,那你说他的cut应该是啥哟。不就完了吗?这不就get count不就不就好了吗?行,那这个地方我要添加一本图书诶。
36:03
我要添加一本图书,那么我是不是要把这个book ID要封装成一个卡?行,咱们来封装一下cut item cut item等于new cut item。好,那卡item里面需要哪几项呢?好,我们来看一下。第一个,自身链ID不需要我们去关注。第二个book book,我们可以要想办法把它关注一下,那就是不ID。啊,根据book ID,咱们可以封装出一个book出来。By count,我们可以给它一个默认值,就是一。然后这个U子病哦,正好正好咱们三线里面正好一个U子,那行差不多。所以我就在这边写一下。第一个。点进去。咱们补一个构造方法constructor ID,我不需要,我只要给后面三个复制是不是。就这样子。
37:00
然后这个book里面,我们最好有一个带ID参数的构造方法,哎,有了。有了那挺好啊,那行,所以回到这边来。第一个new book。把我们book ID把它丢进去,这第一个book是不是导播一下。第二个,第二个是我们的by com日记一码。第三个是我们的user是不是。这样我不就封装出一个卡item了吗,然后把这个卡item把它放进去吗。这样你就可以做添加或者做修改吗。哎,就是这样。好了。这是我们操作完了,那请问操作完了之后,我们应该要干嘛呢。我们点击加入购物车,一点击加入完了之后,我们是不是要跑到购物车的详情页面啊。我们要回到详情页面。因此这个地方我们写一个跳转。我们最好不要直接跳到cut页面,我们最好要重定向一下去查询一次。
38:05
大家想一想是不是?我们前面操作完之后,我们最好要查询一次,把我购物车的最新的情况要查询出来。行。那这步咱们先放一边,我们先看一下我们上面的这个逻辑能不能把它跑通。无非就是如果当前这个用户的购物车里面没有这本书,那我就新增一下,新增一个卡item,在我们数据库当中新增一个卡item,如果当前这本书在我当前item已经存在了,那我就执行update,把它的数量加一。没错吧,好,咱们一起来试一下,我把断点设在这个地方啊,是在这个地方,咱们一起来看一看。啊,一步步来啊,不能着急。呃,现在我这个启动还不行,因为它里面有些依赖,咱们还没有注入呢,还没有配置呢,是吧,同学们咱们把它配一下啊。好,找到配种剂。好找到他。
39:01
我们先从do开始,Use do book do,咱们现在得补一个并ID等于car item do是吧?同学们,Class com.at硅谷点book.do.m po.cut it do,坚持一下啊,我把这把这一段说完,说完之后咱们就休息啊。好,这是do。再来。因为这因为这是一个整体啊,咱们最好是一气呵成,Item service。Class com.at硅谷点book.service.ip.cut it service好。那这个cut it service咱们看一下啊,它里面需要啥,它呢,需要它是吧。需要这玩意儿,所以回去就可以关掉了啊。好,回到这个呢。Name等于它,等于它好,就这样好,我说了,这种配逐文件现在写的很烦人啊,动不动你可能粗心,可能就忘配了。后面我们学的组件的自动扫描,以及我们自动装配,那这整个的都不用写啊,那是一个非常非常优秀的一个变革啊,那个绝对是一个非常一个技术的一个提升。
40:07
因为咱们我们的框架也是在不断不断的优化当中嘛,啊,这个得是得是需要一个时间的积累,得需要这个不断的去验证,是吧,才能不断的去优化嘛。啊,所以说框架也是这样的,越来越优秀。好,那我们这边得需要一个,呃,看一下啊control。我们对应的一个叫cut controller是吧,叫cut controller得需要他。所以呢,我们再回到配重键。稍等啊。我就感觉不大对哦。我这个感觉我写的有点问题。我是不是写错地方了,我写到我另外一个项目里面去了。不一定啊,不一定,我先关掉,先全部关掉,我再来看一眼啊。Service。应该没事啊。
41:00
应该没有问题。再来。为了他,咱们得配一下cut。还卡。回了jas。回到这。是吧,同学们记得考的啊。所以class等于com.at硅谷点不可点。点controller.cutler。好,然后cut property等于看一下啊。它里面。这个地方。Card。这个是添加是吧,那这个添加我得。我得写一下吧。是吧,这个是添加,我刚刚没有写吗。稍等一下啊,我看一下我是不是写到这个上面来了。
42:00
让我看一眼啊。我应该没有写到上面。应该没问题啊,我应该没写到这边的,这样我把它删掉。Remove一下啊,这样他就不会不会有干扰了。关掉,再把下面打开。对的吧,没错啊,这个ID有些是也有bug是吧。就我刚才点他的时候,他结果给我点到上面一个项目去了是吧,现在就回来了。因为我记得刚才这边代码我写过的。好,它里面需要一个service,所以咱们回到这补充一下service。If service。好,然后我记得user里面好像也需要service。是吧?User control。是不是?把它补充一下。等于service r等于service行。
43:00
这样我已经把它全部配好了,我们来试一下。登录进去。呀,怎么还一登录就错了呢?一登录就错,那就说明咱们首页那个上面的购物车像就有问题。看一下啊。这边没报错,回到这。回到这啊,都没报错。都没报存,难道我登录失败了?找了他。
44:00
要跳到book电镀上面去。不点对应的是它,然后到index,然后要到首页上去,没错。啥情况?再来一次。我这边他也没报错啊,他也没给我显示首页。给他配置文件。不够配的呀。登录进去。然后再来看一下。有数据的吧,确实能查出来啊,你看这个cut是不是也有啊,是吧,同学们,然后这个cut cut map里面是不是有一项啊。然后你看一下11个,对的啊,我们数据里面就是11个,我给大家看一下啊,从这开始。一个两个三个四个五个六个七个八个九个十个11个,看到没有柚子柚子病都是一嘛,所以咱们这上面小数字应该显示11嘛,是吧。
45:06
好行,咱们跳转一下,跳转到book点读跳过去。好,所以我现在回到book里面去啊,回到这边来了,那咱们book list也查出来了。好,然后咱们跳转到index页面上去。啊,跳转到index页面,那怎么会index页面不显示呢,就好奇怪。你看。见了鬼了,看一下啊,检查一下它一个错误。他说他有问题啊。这真的是?这不大对啊,他不应该有问题。它是我们,它是我们接口里面的一个啊,稍等一下在这啊,这是一个那个轮播图。先跳过去啊。它是这个啊。所以我就回到页面,我让我看一眼。
46:01
这会有问题。Static这边应该都没问题啊。这个里面有的啊,这里面是有的,CSS是这个是吧,它是有的啊。嗯,不应该是这问题。不应该是这个啊。首页面会出不来呢。跳转到return index。Ta index。当前web in pages pages,咱们刚才index还能显示的是吧?怎么现在显示不了,显示不了,显示不了我怀疑是我的Tom盖,我刚才我在script里面新增的是index.js,我估计这玩意儿他没给我加载。我说的是什么意思啊,说的是什么意思呢?我现在在script里面,咱们新增了一个JS的一个JS文件,叫index JS。
47:04
我们看一下它的artifact里面啊。打开static。打开是有的,同学们。啊,我担心的是没有这一项。先停止掉,然后把IE缓存清一下啊。点他。点他。清除一下缓存。好,清除完了,清除完之后咱们再来试一下,那现在呢,我确定我们登录的首页应该是没什么大问题,我先把所有的锻炼全屏蔽掉行不行,同学们。全部屏蔽啊。再启动一次。
48:06
登录进去。这个页面就是出不来啊。这些数据都是有的。它怎么不显示呢?整个页面都是有的呀。我知道了。真讨厌,我写了个斜杠。这不能加斜杠。就这一个形象的问题啊。回到首页面啊,大家不知道我在说啥是吧?就是这个啊。这不能用单标签行吗?同学们,Script不能用单标签。行不行,得用双表情啊,再来试一次,这样就没问题了啊。再刷一下。后退。刷新一下。
49:00
还没反应过来,他还没反应过来啊,在登录。再查看源代码。还是一个斜杠没反应过来啊,得得稍微等一等,让他获得焦点,这个让ID获得焦点,再让他失去焦点,它会给我重新更新的啊。再点登录。好,我敲多敲几个空行。让他也改动,然后再让再等等一下啊。好,再点击登录。有了吧。是吧,这样就有了啊。就这么一个小问题,好,你看购物车11是不是有了呀,这数字也能显示好,然后咱们下面要做的是不是点加入购物车啊。那我得把断点把它放开,坚持一下啊,最后一分钟,最后一分钟。我把这里拿掉。然后呢,我们回到cut ctrl,然后咱们再回到这个方法对不对,好看一下啊。我当前这本书购物车有没有?应该是有的,这是ID为一号行吗?同学们,ID是一号,咱们购物车看一下啊,用户一是不是一个,是不是这个。
50:08
是吧,输的ID是一号嘛,用户也是一号嘛,他并且他有两本嘛,咱们看一下他能能不能变成三本啊。点加入购物车。一点击加入购物车,咱们进入到断点了,执行这句话进去。进了这个方法点点一下进来了,它是否不等于了,确实是的,它确实不等于了,所以就进来了,看到map,咱们map里面应该有11项,Size是不是等于11啊,没问题,再往下走好,是否包含包含吗?进来。进来之后,然后咱们cut temp temp,然后就获取这一个啊,获取一个temp。那tap咱们看一下是不是书是ID为一号,然后数量是两个打开。是不是两个。啊,然后book打开它里面ID是不是一号一号有两本嘛,再来,然后咱们是不是把它的by count加一啊,你看它这边的by com。
51:01
看当前是二是吧,加一这个变成三执行一下,但是变成三啊变三,然后要是不是要执行update呀,行执行一下,执行完了我们回到数据库看一下。刷一下。呃,这个还没提交呢,因为咱们有事务在啊,稍等一下啊,我得把它提交一下再往下走。好,执行过去了,当前是service。所以再执行过去,回到这边来是不是要他呀。啊要点他那咱们这个cut的点度,Cut点度写了不。Count点度看点度,然后里面是不是没有ind方法,它是不是会给我们报找不到index方法呀,不管它先执行过去再说。好,我已经执行过去了。好,回到页面上去,它就显示空白了嘛,不管它啊,显示空白不管它,因为咱们index还没写呢啊。好,我们现在回到回到数据库刷一下。对的吧。确实是三,那行,咱们再加一本没有的。一号二号有13本,三号四号五号是不是没有啊。
52:04
五号这本书没有。有吗?哦,这有。六号七号,哎呀,这个好讨厌,全全有了,是我删掉也行吗,同学们。要不我就保留12345这个六七八九十十一全删了行不行,同学们。全删了啊,不要了。全删掉了啊,全删完之后,我得让他重新再登录一次。后退。刷一下啊,重新登录,我重新一登录,是不是三线里面就覆盖了。好,把断点线全部去掉。先全部屏蔽掉执行。好,全部执行过去了,行,把断点再放开。再回到我们的页面上来,然后呢,你我估计这玩意儿这本书是叫扶扶桑是吧。扶桑大家看过吗?啊,扶桑这本书都没看过。哦。我也没看过。好。这是十号是吧,行,十号这本书咱们当前应该是没有的啊。
53:04
不ID咱们对应的一号用户没有十号吧,咱们看一看能不能把它加进去啊。就点着往右点。咱们到这边来。要执行它进去点它。往下走,往下走,往下走,看他这个衣服现在符合不符合。这个衣服现在符合不符合。不符合吧?哪里有十号这本书啊,没有吧,所以咱们应该走else,哎,果然走else,咱们执行一下添加全部执行过去,好,虽然显示空白页,但是咱们不管它。你看刷一下。是不是有啊,那就对了。啊,那就没有问题,我刚刚说,我刚刚说有事物存在,为什么,为什么有事物存在,它就它就就没有啊。还记得吧啊。咱们是不是搞了一个open in filter,还搞了个trans manager,是不是一直要你提交完成之后,它是不是那个过滤器响应的时候才会提交事务啊。还记得吗?啊,所以说你中间有断点在,你怎么刷新它都加不进来,一直要等全部响应,响应结束之后,他事务才提交呢。
54:07
啊,所以加进来没问题啊,没问题,那行,现在咱们已经把这个添加到购物车,这个逻辑已经把它搞清楚了,下一步就比较简单了,下一步我们是下一步我们是给这个卡的发请求。啊,给cut了,就是给他发请求,那很简单哦,我就在这里面写个方法叫index呗,Index就是根据当前的用户再去查一下他的购物车呗。啊,这个比较简单。那行,咱们一会儿再看。
我来说两句