常见的购物车商品的数量添加的问题
问题引入
大家平时添加购物车的时候不知道有没有这样的一个体验,当年点击一个商品的信息的时候,我们往往都是能够实现一个累加的操作,当点击同一个商品不会实现累加的功能,但是当我们实现分别添加不同的商品的时候,能够实现累加的功能?
问题分析
大家可以想想,为什么会是这样的现象呢,显然当我们点击该商品的时候通过查询该购物车的id对该购物车的id进行判断,如果是同一件商品,我们就不让其累加,反之如果不是同一个对象,我们就对其做出判断,做出想对应的累加操作,页面没有发生跳转,而完成数据的涮新,这种变化即我们平时所常用的ajax来做出来的,大家要考虑一下,如果是上面那么简单,我就不会拿出来分析了,下面我先简单讲下该系统中的情况的变化和有用户登录上才能看到我们的看到的现象,即我们有一个用户
有关系的数据表的分析
购物车的数据表
当然还有好多好多其他的表,在这里就不多介绍,下篇博客会对整个系统进行一个详细的概述,该表主要牵扯到各个表的主键和其订单号的实现,下面对其现象进行简单的分析
具体功能的实现
1.点击添加到购物车,对该点击事件进行监听
2.使用ajax对后台发送请求
3.对该请求的返回值进行判断,做出相对应的变化
4.假如是返回的数据是2,其数据进行累加
5.最右边的箭头随着点击事件的触发,而达到响应的效果,从而达到累加的操作
1.点击购物车,对该事件做出监听事件
~~~java
<script>
/*使用ajax将商品添加到购物车中去*/
function add() {
var user = "${sessionScope.user}";
if (user.trim()==""){
alert("域对象中没有值")
location.href="<%=basePath %>login.jsp";
}else {
//用户成功,将用户的信息添加到购物车中去
$.post("<%=basePath %>trolleyServlet",{method:"addTrolley",gid:"${goods.gid}"},function (data) {
if (data=="2"){
//将购物车中传入的数据加一
var num = $("#trolleyCount").text();
$("#trolleyCount").text(Number(num)+1);
}
});
}
}
</script>
servlet层对数据控制
~~~java
//使用ajax将数据库中的数据进行增加
public String addTrolley(HttpServletRequest request,HttpServletResponse response) throws IOException {
//1.从前台获取商品的gid和用户的信息
int gid = Integer.parseInt(request.getParameter("gid"));
User user = (User) request.getSession().getAttribute("user");
//2.调用service进行数据的判断和值的返回
int count = service.addTrolley(gid,user);
//加入购物车是新的商品则添加,如果不是新的商品则从0开始加
//可以根据 i = 1表示有当前的商品,i = 2表示新加入购物车一种商品
//3.将数据进行传递
response.getWriter().print(count);
return null;
}
dao层对数据进行持久化的处理,此时添加的是gid和uis这两个字段,通过对这两个变量的处理,实现购物车对象的创建,其他的字段就不多介绍,在下篇博客中会详细介绍
~~~java
public int addTrolley(int gid, User user) {
//1.定义sql
String sql = "insert into trolley(gid,uid) values(?,?)";
return template.update(sql, gid, user.getUid());
}
该部分数据应该随着你的点击事件做出相对应的判断,做出相对于的变化
~~~java
//当用户登录成功,获取当前用的购物车商品样数 此时发送ajax请求
if("${sessionScope.user}"!=""){
$.ajax({
type: "POST",
url: "trolleyServlet",
data: "method=findTrollyNumber",
success: function(msg){ //对查询的数据做出相对于的变化
$("#trolleyCount").text(msg);
}
});
}
通过对该用户的id来查询该用户下的数据变化,从而判断其变化的数据,并获取其数据的值
~~~java
//根据使用者的id来获取到商品的信息 使用ajax异步请求来获取想要实现的数据
public String findTrollyNumber(HttpServletRequest request,HttpServletResponse response) throws IOException {
//1.获取用户的信息
User user = (User) request.getSession().getAttribute("user");
//2.调用方法来获取其数据的变化
int num = service.findTrolleyNumber(user.getUid());
response.getWriter().print(num);
return null;
}
~~~java
@Override
public Trolley findTrolleyByGid(int gid, int uid) {
//1.定义sql
String sql = "select * from trolley where uid=? and gid=? and orders_number is null";
return template.queryForObject(sql, new BeanPropertyRowMapper<Trolley>(Trolley.class),uid,gid);
}
当我们处理单个的问题的时候,我们是比较清楚其业务逻辑的,但是当我们面临着很多很多的业务逻辑嵌套的时候,我们会不知觉的麻木了,不知道怎么联系,怎么弄到一起,最终达到我们想要的目标