购物车、生成订单

版权声明: https://blog.csdn.net/qq_39263750/article/details/90021895

添加订单过后 如何获取当前订单的ID?

方案1:
在这里插入图片描述

这个方案的问题是 系统并非同一个人用,在多并发的情况下,若你添加的订单 别人同时也获取了订单,这时的这个MaxId 就不知道是谁了。

方案2:
在这里插入图片描述
在这里插入图片描述
这句话就是告诉数据库,在执行添加语句的过程中,要获取到他的主键值。
在这里插入图片描述
获取到了结果集,但是这个就只返回了 订单表的id(一个或者多个,根据你添加的数量来定)

测试:添加订单 既要添加当前订单的地址,也需要加入创建这个订单的用户的id

在这里插入图片描述

一个业务:订单的超时,商品库存增加/减少的情况

:订单产生后会产生一个状态:未支付。 由于下订单后库存会减少,这个未支付的状态不能一直存在。
所以在创建订单的时候 要添加一个计时器,过了固定时间后会超时,把库存量重新加上去(自动恢复)。

实现定时器任务有两种方法:
第一种:java.Util.Timer 工具来完成定时操作
第二种:开源框架,调度器Quartz

两个方法的相同点:
定时去执行一些任务,定时删除一些过期的数据。定时发送一些通知。

区别:Quartz开源的框架,功能更全面和强大,但是使用起来复杂。

Timer是jdk自带的工具,学习起来轻松简单,能够较好的完成定时任务。

扫描二维码关注公众号,回复: 6656215 查看本文章

在这里插入图片描述
在这里插入图片描述

测试
在这里插入图片描述
在这里插入图片描述
只执行了一次。

在这里插入图片描述
这时就满足了多线程了,多个定时器同时运行。
在这里插入图片描述

问题:现在的定时器执行完毕之后,并没有关闭定时器,而是挂起了 会占用内存。所以要关闭。

关闭定时器:
在这里插入图片描述

但是不能直接写这里面,java语句顺序执行,在这里写了就直接关了

需要在Util里面写,
在这里插入图片描述

然后在timerTask里面调用就行了。
在这里插入图片描述

这个时候发现,定时器结束了,进程就自动关闭了。

接下来就是 商品库存的恢复问题了:

购物车

完成购物车可以使用三种方式:
session来完成:将每个人的购物车保存到cookie
使用cookie来完成:将灭个人的购物车数据保存到cookie中。
使用数据库来完成:将数据保存在数据库中。(因为购物车会频繁的增删,用数据库完成效率较低。)

为什么选择session:

1.购物车数据经常变动。(数量变更)

为了更好的优化session, 仅仅把当前购物车里面的商品的== id== 存在session里面。
(如果什么都存,用户越来越多,session占的内存就越来越多。)

在业务层写一个方法 根据ID来查询其他数据。
传的参数是一个set(因为可能传递多个id过来,购物车内商品不唯一) 里面装的都是商品的id。
return 返回所有商品的实体对象。在这里插入图片描述

map的key 正好是一个id 就把set穿进去。

查询的时候传一个集合进去 返回另一个包含商品所有属性的 list。

关于BookDto
在这里插入图片描述

前台:
在这里插入图片描述
点击,发送ajax请求。
在这里插入图片描述

可以把其他信息藏在hidden里面传过去
调用addcar 把当前商品的id传过去;
在这里插入图片描述
在这里插入图片描述

先得到id(用controller不用,id可以直接传过来0

得到session对象

创建一个map

sql若过多,影响效率
通过StringBuffer得到 拼接上?号和逗号
在这里插入图片描述

业务层: 设计findBookByI 返回dto

设计持久层

测试

写controller

猜你喜欢

转载自blog.csdn.net/qq_39263750/article/details/90021895