购物车问题合集

1.jdbc连接写错了,我恨死自己了

 Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/cart?characterEncoding=UTF-8","root","admin");

2.在这里插入图片描述
解决方案:
思路:
因为订单项实体类中定义了id,但是在删除订单项的时候,获取的商品的id,再添加的时候,重复商品,只需要修改数量即可,但是加上一个id的话,业务就比较复杂了,所以根据商品的id来删除一个一个的订单项,就这么想。以product为中心的前后呼应。
3.
在这里插入图片描述
3.删除订单项的问题
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
4.
在这里插入图片描述
1.第一种情况原因是因为:获取session对象里面的ois,这个ois是共享的,一旦修改后,产生的影响是永久的
2.第二种情况也就是我界面上看到的那种,因为forEach循环,每遍历一个结果,才会删一个订单项,而break是跳出当前循环,所以界面又回到了订单项的页面,我才需要在一次点击删除,再删一个商品。
3.第三种情况就是,不加break,结果也是只能一个一个的删除,但是删到最后一个,会报错。
3的错误如下:
在这里插入图片描述
第三种情况的原因及解决方法网址:https://www.cnblogs.com/loong-hon/p/10256686.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.自动生成主键的相关代码
在这里插入图片描述

添加订单项的代码逻辑

package Servlet;

import DAO.ProductDAO;
import entity.OrderItem;
import entity.Product;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet(name = "OrderItemAddServlet",urlPatterns = {"/addOrderItem"})
public class OrderItemAddServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int num=Integer.parseInt(req.getParameter("num"));  //1获取商品数量
        int pid=Integer.parseInt(req.getParameter("id"));  //2获取商品id
        Product p=new ProductDAO().getProduct(pid);  //3根据ID获取商品对象
//        4新建一个OrderItem对象
        OrderItem oi=new OrderItem();
        oi.setNum(num);
        oi.setProduct(p);
//        从session中获取一个list 这个list是用来存放当前用户购买所生成的所有订单项的
        List<OrderItem> ois=(List<OrderItem>)req.getSession().getAttribute("ois");
        if(ois==null){
            //第一次购买,这个订单项一定是没有的  需要在session中定义一个 方便后续使用
            ois=new ArrayList<OrderItem>();
            req.getSession().setAttribute("ois",ois);
        }

//        对增加之前确认是否订单项表里是否有相同的商品
        boolean found=false;
        for(OrderItem orderItem:ois){
//            判断即将添加的订单项中商品和集合中已有的商品是否有相同的出现
//            如果出现相同的,则将两个订单项的购买数量进行合并
            if(orderItem.getProduct().getId()==oi.getProduct().getId()){
                orderItem.setNum(orderItem.getNum()+oi.getNum());
                found=true;
                break;
            }
        }

        //        增加订单项表里没有相同的商品
        if(!found){
            ois.add(oi);
        }
//        把新增的订单加入带这个list中
//        ois.add(oi);
        resp.sendRedirect("/listOrderItem");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值