00:00
下面我们来看如何把商品加入到购物车里边,这个呢,我们昨天已经进行了这个演示,什么情况啊,当我点击。当我点击某一个加入购物车,比方我点开的时候,然后怎么样,这个上面就会说是吧,你已经将什么东西放购物车里边了,购物车里边多少个商品可以进行查看,诶这就是我们加入购物车的挑战,那现在的问题就是。我如何来加入购物车呢?那我们回来看啊,加入购物车的流程呢,是这样的浏览器。像呃,Book so,发了一个请求,我要去掉ADD to car这样的一个方法。然后呢,这个现在需要获取购物车,然后呢,他来调service的这个什么呀,ADD to card,因为具体加的话呢,不是我的这个谁加呀,不是service加,而是service加,但是这个加入购物车的话,注意哈,注意这个操作,它不需要去调DAO,因为我们不需要把它存储到数据库里边。
01:23
然后forward是这个页面,这个页面上显示就可以了,这里面有一个问题,我们这个购物车呀,一定是一个对象,这个对象是放在request里边还是session里啊。哪里边,呃,赛里边这个我们前面讲赛的时候的话呢,已经演练过了,因为我下一次点的时候,我用的应该是同一个购物车吧,所以说购物车必须放在30里面。好,下边我们看一下,那购物车这个数据结构应该是什么样的呢?我们回头我们来点什么呢?我们来点击这个,点击这个查看购物车,我们会看到这样的一个页面,我们看看这个购物车里边放的究竟是什么东西。
02:06
购物车里边放的,比方说SPRING4本,他LET4本,CVS1本,大家也可以想一下,我们在平常在那个超市买东西的时候,比方说买方便面。买这个嗯,买笔买电池哈,看买了好多,在结账的时候你会发现服务员怎么减。他是不是把那个一类商品一起结呀。方便面都拿过来多少包,然后一刷,饮料拿过来多少瓶,是那么做吧,我们这也一样,你看斯这个书四本。单价是它,因为这里边有个书名,还有一个单价,所以说这个spring和这个价格,这是不是一个输的对象啊。是吧,这是一个书的对象,好了,是不是还有一个四本啊,我书里边没有几本这一说吧,所以说这个本数和我这个书放到一起,又变成了一个对象,这个对象叫什么呢?叫shopping card item,叫购物车里边的购物项。
03:14
购物车里边的购物项构成了shopping item,我们看这个shopping count item应该有几个属性啊?几个属性啊,这不写着呢吗?两个属性吧,一个是书,一个是书的数量,当然了这里边可能还会有一些其他方法,然后的话呢,我是不是有好多这个,呃,双明看的item啊,这是一个。这是一个,这又是一个,每一个都是一个shopping item,那我整个这个shopping car item需要换到一个集合里边吧,这个集合是list,是map还是set?大写的初看的话,感觉哪个都行,那后边你要注意到有一个什么呀,是不是还有一个删除操作呀。
04:06
就是说我可以在购物车里边把这个购物项给删除吧,OK,我要把某一个删除的话,最简单的方式是什么呀?是是个K为好啊,所以说应该是一个map,那是一个map的话呢,这个map的键是什么呢?键就应该是书的ID值是对应的shopping card item,听清了了,好了,整个分析过来,我们看双面cut item里面有两个属性,不可更quantity。Shopping car里边只有一个属性box,但它是一个map,见识inte值是shopping car item,然后的话呢,它会有一些对应的方法,比方说啊,这个有一个构造器,因为这个shopping car item啊,它一定得有书。如果要是有一本书的话,那这个就是一,有两本书的话,这就是二啊,有对应的几个get set方法,这个该看什么方法呀,叫获取这个购物项的钱数,比方说啊,我一本书是50块钱,我这个上面看的item里边放了五本书,也就是250块钱。
05:24
好了,我们在最前面的话呢,我们发现我们在点,比方说我点这个是吧,我多次点的时候,这个数量是不是累加呀,所以说还有一个什么使它增加的方法,这增加是干什么的,就是始终就是使这个qua加1OK过来,Shopping car有一个书,当然它还可以加一个书进来。加一个书进来,然后呢,有没有这个书返回books。这个box返回的是什么呢?啊,也是一个map是吧。
06:01
Get books,还有get get。Book number get total money it empty clear item跟update it,大家看这个呃,方法名字的话应该能够明白。这里边每个方法都是神马意思,我们有一个一看前面一个一个写,说这是什么意思,这是什么意思,大家看这名字就能想到,然后呢,我们又我们有了这两个数据结构以后,我们就可以实现。这个操作,以及查看购物车的操作。以及它都可以实现,所以说这里边儿的话呢,这个关键的是我们要分析明白为什么是这样的两个数据结构。好了,这两个搞清楚的话,然后我们画了一个时序图,后边的这个问题的话呢,就比较明白了,那。
07:00
一下。先看他。那shopping item写一下,这个呢,应该是购物车里面。嗯。放里边吧。那这个的话呢,你也可以给它做成一个。实体类,但是这个实体类啊,在数据表里边没有跟它对应的对象啊,数据表里边没有跟对应的表行吧,叫shopping car item。然后说一下表示嘛,意思什么呀,购物车中。的商品。哎,他就是疯狂购物车中的商品。
08:03
装装了购物车中的商品好了,包含商品。对商品的引用以及。购物车中该。商品。数量,所以说这个商品的话呢,我们的商品就是出哈。还有一个什么呀,方数量。这个是商品的数量,此外呢。你们觉得顺理成章。看看第一个构造器。好吧,你要传一本书过来的话,传本书过来我们要求什么呀,要求这个时候那一本书的话,这个时候数量一定是100。
09:07
初始化的这数量一定是一好了,然后呢,Get部。然后get。还有什么?Set,还有一个get money。他返回的是什么呀,返回的是。返回该商品。在商品。在购物车中的钱数结果是什么呀?你点什么好了?
10:15
使商品数量加一。这就写完了,需要说明的是呢,这个就是购物车里边实际上放的这个商品,它包含。对商品本身的引用,还有该产品的数量,我们可以从平常购物里边的话呢,也能看到这个规律。好了,下一个shopping。
11:05
这里边的话呢,我们说了是吧,它包含什么呀?包含一个卖,刚才我们讲的为什么是一个卖,因为我们还需要对某件商品进行移除,以及改变某个商品的数量,这个时候我拿这个ID去获取的话是最容易的,你用set跟list,我不能够马上把这个商品给获取出来。后边这个是shopping。等于new。是吧?然后第一个爱的book。I的book是怎么写的呢?写了一个进来。那怎么说呀。
12:00
啊,向购物车中,向购物车中添加一件商品。不知道咋讲的,他说。在购物车里边加一个商品,就这个意思。就点它点一个,再点一个,再点一个,再点一个。就这个意思,我我怎么样才能够实现多次点击啊。那我需要怎么办?第一个说什么。先检查购物车中有没有该件。该建。商品该商品吧。说。若有,则使其。
13:01
数量加一吧,是没有呢是吧,没有怎么样。新创建。其对应的shopping car item,并把其加入到box中,是这么写吧,就是取加的话呢,我得看一下,我得看一下有没有。怎么写啊?行吧。Shopping I等于。不点盖。T应该是book.get ID就获取一个好了,这个家伙可能是空。空的话怎么办呢。
14:00
空,我就创建一个新的shopping item,然后把它加到我的里边来,见是book.get ID直是S点好了,否则呢。否则是不是有啊s di.agreement数量加一是这么写吧,第一个方法搞定了下一个。下一个呢是have,就是购物车里边有没有有没有这个书板。哎。Public。波尔行汉布。ID说。
15:02
检验购物车中是否有,该有有什么呢?有ID指定的商品。有没有你就return呗,什么books.contains吧,Key,哎,你是不是可以了。有没有这个商品,再来下一个。Get。啊,这个简单,直接get bookook,这就可以了,再下一个get book number,一共有多少本书吧,Public in get book number说返回,返回购物。车中商品的总数量一共一共有多少啊?
16:07
Inch。Total等于零。Return,返回快。循环。这是一个什么呢?这是一个,这是一个卖。map.entry。值呢?我要返回总的数量动宝宝。我需要这个就可以了。Shopping it SCI只是啥呀,点value吧,然后呢?Coco加等SPI点这么写吧。总的数量吗?再来还有什么?
17:00
还有一个帕布里克。Collection。Get item获取所有的图书信息。不许。所有的购物车,购物车中的所有的图书的信息图书组成集合吧。组成集合咋写?你看box点大家不清,叫图书组成的集合,你这么你反回是个什么东西啊,是不是上面看到item吗?看看这item是什么?啊,就是邵平康的item写错了啊。所有的shopping car。
18:03
It这么写。吃完了。这个这个完事了,下面是。会是个钱数。Public flow get money。干什么呀?获取购物车中所有的商品的种的。娴熟。Total等于零,然后呢,Return total这咋写?同样,我是需要那个SCI吧,是吧,那这么写就可以了,或循环。Shopping。
19:04
It。这样就可以。然后是。涛涛加港。SCI点就可以了吧。听说这个I money是不是已经返回那个商品的这个钱出来,就是这个里边这块书已经算完了,直接这样一起就可以好了再来。下一个是不是空,购物车是不是空,Public for is empty。什么呢?返回购物。车是否为空?Returnre is empty。还有啥呀?我一刀。Clear是干啥的?
20:02
叫清空,购物车很好清空。购物车什么情况啊,点吧,直接清。Item。Avoid item移除指定的购物项。ID移除指定的购物。好,怎么一出啊。Remove ID移出好再来最后一个。
21:07
Public VO update。干啥用的叫?修改指定购物项与项的数量,那我传什么呀?传两个int吧,两个int都是啥呀?第一应该是ID吧,你可以说ID,第二个应该是int,怎么搞啊?o.GAID前进率不能为空,所以说需要判断一下照明它的X等XT等于它带不为空的情况下怎么办呢?我就从里边把它给。点set方读完了,这就是我的shopping面cut对项,以及上面cut item,诶,这两个有了再来写它。
22:15
加入购物车。这个就变得容易了,怎么说呢,看不懂。我们先得浏览器,这个不用说了啊,I to car I to car的话,你得给我传个什么过来。纯ID吧,我加谁呀?然后的话呢,我们在bookstore web u里边,我有这么一个工具类,里边有个方法可以获取购物车,然后呢,我在这个book service里边有个方法,我可以把这个商品加到购物车里面,然后就O了。那我这块我给你显示了,说您的购物车中有多少本书。
23:00
可能是零管,可能是没有,那而且呢,我们刚才我们还说了是吧,这个购物车需要放到30级,于是我们先来写一个web,呃,Bookto web,把这个购物车先放到里边去过来。喂。不。到外网、YouTube。有个方法。PU bag。Shopping。看大家去,少看我想获取勾通对象。嗯。HTTP。好了。获取购物车。想下车怎么获取从。
24:07
三中。过去说落。弱三生中没有在对象还没有呢,说怎么了?则没有创建一个新的购物车对象。放入到赛事中是吧,所以我们出现一个新的放里边,如果有呢,若有则直接返回,是这样吧。这就是获取购物,就是说我我想获取,比方说我第一次放商品,这个购物车对象是不是还没有呢。那就创建一个新的放里边,如果要是已经有了的话,直接返回,那于是写吧。
25:05
What could it be?Session session等于request.session好了,然后shopping。等于三点。没有啊。你能见吗?啊,如果没有的话。怎么办呢?放进一个新的,把它放里边去。这就是我们这个方法叫获取购物车对象的方法。好了,这个扭完之后的话呢,我们再看还有啥呢,没啥了,这个我们就可以从前往后实现了。
26:09
嗯,找到我们的。加入购物车好了。Book问号method等于ADD to。好了,然后。哎,加完购物车之后的话呢,我还要返回这个页,所以说跟这个一样。那一样啊,其他的都一样,那写方法吧。过来。Savage。
27:16
这步骤呢,第一步获取购物车一项。第二步要用。第一款不是他要做第一步是什么呀?第一步获取商品。ID第二部分工作对象第三步调用呃,叫什么book的方法把。
28:00
商品放到购物车中。第四步。转发页面到到哪啊。这个时候的话呢,我应该还去显示吧,还去显示,这个时候的话去哪合适啊。去。就这法里可以,因为我还要来这个页面,我还我还要去显示,这个时候你直接去books是不行的,知道为什么吧,你要直接去这个books的话,我这个books里边我是不是需要一个集合什么的,是不是需要那个book配置啊,是不是没有啊,所以说这会这个应该是直接调用。盖方就行了。ID string IDF tr等于request,点在form。
29:03
ID,然后呢,获取公车对象双看。等于。不高。好了,放里边去。OK,这样写完,然后的话呢,把这个书放里边去,我们写吧,点。哎,不看放什么呀,放的是ID和。
30:01
和说cut c,然后将这个get。好,新建这个方法。说咋加呀。sc.I。哦,这里边我们有个方法叫艾布。我我为什么只有IB这里边没有没有一个ID的呢。因为这个时候你要是加的话,你有这你得有这个book的引用吧,这个不可引用,我我是需要查数据,我是要查数据库的吧,你看这个时候的话呢,这里边就不只是对这个do的这个封装了,我需要破几步。等于。等于什么呢?等于book da.get book,如果这个book的确是有的话,那我们开始放吧。
31:06
X1减I的哦,放里边了就完了,如果要是空。就是说我往里边放了是吧,我要是是空,我这个不就是你给给我一个ID,这个ID是不合法的,然后完了我这个值我没发进来怎么办呢。说没关系,应该是什么情况啊,就是他调皮了是吧,他怎么调皮了,刚才我们这个超链接,我们超链接是不是写好了是那个ID啊,然后他去上面去改那个ul地址,把那ID值他给改成了根本就没有的一个数,是不是有这种可能啊。那就告诉他,你这个页面不存在。那你怎么告诉呢,我们看啊。这个是很明显可以放的。如果要是否则。
32:03
告诉他。不行,这个时候呢,我们可以通过这个返回值的方式,我们也可以通过抛一糖的方式,再回到这个里边来。看这啊,哎,看这这块这个ID的话呢,就应该是一个合法的ID,否则就不行,然后我们可以写一个,你看这不是ID吗?是吧,如果这个ID是合法的情况下,我们才进行。这个操作我们写个返回值吧。等于false啊,那我说if,我说如果起码而言我这块怎么了,我得保证这个ID是大于零,我才会进行这个操作吧。是吧?好了,这个操作的话呢,然后怎么办,然后我在加的时候的话,能让他有有一个返回值,成功的话,你给我返回一个to,否则给我返回一个boss。
33:12
霍尔后来就成功return。否则你看行了,带回到这个里边来,那这个时候这个flag。If。FLY,如果要是O的话,有它吧,否则呢,特方法结束,否则呢。否则我们要找的是不合法那个吧,这个。写完好了,这一圈完事之后的话呢,那勾图里边我已经放了哈,那我在页面上如何来进行显示呢?您是不是已经成功了呢?那还有还有这个问题页面上我们看方程功是啥样啊。
34:15
这样说你已经将什么什么放到购物车里边了,购物车里边都是本储藏购物车正常情况下的话呢,都是。这样多少本书查购物车就是这就是这一步啊,如果购物车里边要是这个购物车里边有东西的话呢,他都是要写的。然后多少本书,长安购物车这个的话呢,就是我新加一个之后,我再从这写,于是books books books books拿过来往上走。在这儿。See if。衣服啥呀?当福,我要看看什么呀?
35:00
30里边有没有这个。Car,这应该跟谁对呀,跟这个对吧。周边那个舰队啊。过来它是干什么用的?Em是什么意思,另一方面看咱里面有没有吧,另一方面看它是不是空吧,如果不是空的话,那我就写了说啊,您的购物车中,您的购物车,购物车中有多少件多少本书吧书,然后的话呢,给这个超链接查看购车。查看购物车。好了。没有就没有了啊。好了呢,多少会儿书啊。
36:02
咋写啊?三点shopping点,我们这不写过一个呀,什么方法来着,获取总的数量吧,是不是get book number。就number就可以说C回到这个里边来过来,哎,一本书写完好了,那还有一个呢,还有一个啥呢,还有一个他呢。在什么什么放里边多怎么写。这个呢?我如果要是能回到这个页面的话,说明那不是存在的,所以说呢,我直接在这个里面,在购物车的时候。这个我放一个啥呀。我放一个要省事。
37:06
点,然后说。如果这个不是空。If if,如果这个。不能这么写吧,大写还点拍拖吧,是吧?看这开啊开不等于now。告诉一声。嗯。您已经将什么情况沟通您?已经将。什么什么呀。
38:00
这个吧。这个放入。到购物车中,然后站两边。行吧,好了,到这块的话,我们这个操作就成功了,看一下。下一页。加上购物车快跑了。应该是没有这个方法啊,控制异常。Flag。我上一行是谁呀?SC没获取着吧?要这么说的话,是不是SC没获取着啊?那过去找我是service,回来吧。SC。
39:00
C、他。看看啊。我先获取是空的话呢,创建一个新的哦,我是没法SD啊。保存出来。第二页。放里了吧,是吧,放置放里了,不过你那信息说没有啊。不行啊。不到这个里边来。过来。三。如果这个不是空。看上去没啥问题啊,放一本书了啊,我再放一本。对吧。几本书没出来吧?几本书?它的book number,我们说book number,我要看shopping里边有个方法book number吧。
40:10
再回来。Do。保存后来再放一本是不是三本书啊,就把这个放购物车里边来,这个抄出就写完了,而且我们看这个页面信息是不是还在啊,你看都可以点。是吧,下一页25本书没问题好了,那然后的话呢,我要点长阳购物车的话,我去下一页,下一页长啥样。是长成这样啊,我们简单的看一下这页,大家自己来写,这一页很好写,直接连去就可以,就直接连过就可以啊好,那我连一下,我说长安购物车,哎,比方说我shopping cut car点加P,我这样写,我直接连过来的CTRLC。
41:05
我直接连到这个页面,那这个页面呢,我们正常情况下呀,我们把我们的页面我先这样写一下吧,这个页面呢,我都应该放到什么上面呢,都放到了我这个,嗯。那我这样直接连连不过去的,我暂时为了做实验的话,先放到。敢情这么想?然后。后来我只想说多少本书,把这书便两个书对不对?第一稿看这样子啊,书的数量。数量。咋写的呀?Scope点。Shopping car.number是这么写吗?
42:05
不可能,不可能不可number可能C。好了,数量好了,写个B。然后呢,哎,我想看一下你里边到底有多少本书。怎么看呢?做个循环吧,这是一个简易的啊,回头呢,我们还会详细的来说它。咋写for each?Items。CTRLCCTRL为看这个shopping cart。
43:07
当时我们写过一个什么,比如getone吧。啊,直接调。看点it里边放的是不是一个一个it吗。我item,然后呢,我说哎书书说是什么样的item.item双看item吧,Book点开。布莱价格。x.book点还有一个数量吧。数量是谁,是it点直接吧。过来BR行了。只是想看效果。下一页查看有。
44:01
说呀看JSP哦,这块有问题是吧。因为这块的话呢,超了业务加这个东西的,那么暂时我过来。加个问号,Number写了,每次我们都写它。这个时候的话呢,这块我们是可以进行重构的啊,感时先这么写吧。就是说大家看到我每一次我都写这个东西,所以说像前面这些,包括呃,Book so,问号、配置,Number,我们可以写到一个地方去。回头我们再来重构他啊,暂时呢,先这样写。OK。回退下一页,注意30本书,大家看35,这是20吧。是20吧,541是不是30啊。这个的话呢,就相当于是这个页面的一个显示,只不过没有删除,没有修改数量没有清空是吧,但是这个页面大致上这个图形呢,已经出来了,以上呢,就是我们加入购物车的整个流程。
45:16
嗯。好了,我们回过头来,我们归结一下,看一看到底是怎么加入购物车的。回来讲了不少啊,首先呢,我们需要理解购物车的数据结构,就是购物车是什么,购物车是一个shopping car的对象。这里边放的是shopping car item的一个map,为什么是个map呢?因为我回头进行删除跟获取的时候方便,然后在购物车里边放的并不是一本一本书,而是书跟quantity这两个属性封装的上面看的item,这个对于理解购物车比较重要,那这块的话呢,我们有一个图比较详细的进行说明了。
46:04
OK,这个OK之后下面的步骤,你就这个步骤怎么怎么整的呢?到这个里边新增这个方法获取购物车,然后加到购物车里边来,诶forward怎么加到购物车这里边,嗯,要说步骤的话呢,只有这块会复杂一些close哦。看这个。他咋加的。这样加先获取书,然后把这个书加到轴册里边,这个里边的话呢,有点业务超出这个意思,它并不是单纯的去调一个dau方法,然后怎么怎么样,你看这个时候加入购物车这个操作不应该放在so里边,So是一个控制器。查询。DAO,那加入购物车这个当然也不应该放在DAO里边,所以说这个就是什么叫业务代码放在这个里边。
47:00
好了,再看一下我们。帮咋写的呢?哦,获取ID。然后呢,获取购物车放里边,然后怎么样,根据方法的执行情况转发页面吧。这就是一个控制器。好了,把这个写完了哈,放在大家,大家把这整个这个流程梳理一下,你可以怎么办呢?你可以这么办,你可以把我们的shopping car跟shopping car item这两个方法重新来写一下,就是说每一个标方注释,比方说属性啊,什么意思啊,方什么意思啊,然后像我这样。把这两个类呢重新写一下,然后我们可以实现这个功能。加入购物车可以实现了,哪可以实现呢?另外这个页面查看整个这个页面,呃,像我这样写出来这个也可以实现了,我是不是已经把这个图形是不是已经搭出来了,你只需要一个一个加就好了,至于说如何来做删除跟修改这个的话呢,呃,我们回头我们再说。
我来说两句