将商品添加到购物车

涉及到实体类有 用户,商品,再加一个购物车表

需求:
在商品详情页面上,,选择商品 ,点击加入购物车,在购物车页面上展示里面所有的商品
分析:
涉及的实体:
购物车 购物车项 商品 用户表
步骤分析:
1.商品详情页面,,点击加入购物车
2.在cartservlet中的addToCCart方法操作
先获取两个参数 商品Id 和 用户Id
3.获取购物车,调用add2Cart(cartitem)
4.页面跳转
重定向 /jsp/cart.jsp

public class CartServlet extends HttpServlet{

    public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
        HttpSession session=request.getSession();
        User user=(User) session.getAttribute("loginUser");
      //查看用户是否登录
     //如果登录
        if(user != null)     {
 //获取商品ID 
    String[] bids = request.getParameterValues("bookId");
            //调用service中的addToCart的方法,加入到购物车
            ShopcartService shopcartService=new ShopcartServiceImpl();
            boolean result = shopcartService.addToCart(bids,user.getUid());
            //如果添加成功 转到商品购物
            if(result) {
                request.getRequestDispatcher("ShopcartListServlet").forward(request, response);
            }else {
                //失败的话 转到商品浏览页
                request.getRequestDispatcher("BooksListServlet").forward(request, response);

            }

        }else {
            //用户没登录,转登录界面
            request.getRequestDispatcher("login.jsp").forward(request, response);

        }
     } 
}

service类

//添加到购物车
@Override
public boolean addToCart(String[] booksIds, int uid) {
    try {
        //首先查询购物车里有没有该商品
        for(String bookId:booksIds) {
            Cart cartIn = cartDao.get("select * from cart where bid=? and uid=?", Integer.parseInt(bookId),uid);
            //没有该商品 就加入改商品,根据自己的表加入相应的字段
            if(cartIn == null) {
                Cart cartNew = new Cart();
                cartNew.setBid(Integer.parseInt(bookId));//商品ID
                cartNew.setCount(1); //商品数量(我这里是从1开始,每次加入商品的数量为1)
                cartNew.setUid(uid);//用户ID,用来表示是哪个用户添加的商品
                cartDao.save(cartNew);
            }else {
                //购物车里有该商品,购买数量加一
                cartIn.setCount(cartIn.getCount()+1);
                //更新数据库
                cartDao.update(cartIn);
            }
        }
        return true;
    }catch(Exception e) {
        e.printStackTrace();
    }finally {

    }
    return false;
}

 

//Vo里封装一些值,用于页面显示用

import java.math.BigDecimal;
import java.util.List;

public class CartVo {
    
        //商品总价格
	private BigDecimal totalPrice;
        //商品明细
    	private List<CartItem> datas;
	
	public BigDecimal getTotalPrice() {
		return totalPrice;
	}
	public void setTotalPrice(BigDecimal totalPrice) {
		this.totalPrice = totalPrice;
	}
	public List<CartItem> getDatas() {
		return datas;
	}
	public void setDatas(List<CartItem> datas) {
		this.datas = datas;
	}
	
public class CartItem {
	
	private String photo;//商品的图片
	private String bname;//商品的名字
	private int count;//商品的数量
	private BigDecimal price;//商品的单价
	private BigDecimal subPrice;//单个商品的总价格
	
	public String getPhoto() {
		return photo;
	}
	public void setPhoto(String photo) {
		this.photo = photo;
	}
	public String getBname() {
		return bname;
	}
	public void setBname(String bname) {
		this.bname = bname;
	}

//...................
//以下省略get和set方法

 

 

service的方法实现

此方法很重要

@Override
	public CartVo myCart(int uid) {
		CartVo vo = new CartVo();
		try {
			BigDecimal totalPrice = cartDao.get("SELECT SUM(b.price*c.count) totalPrice from books b INNER JOIN cart c ON b.bid=c.bid where uid=?", new RowMapper<BigDecimal>() {
				@Override
				public BigDecimal oneRowMapper(ResultSet rs) {
					try {
						return rs.getBigDecimal(1);
					} catch (SQLException e) {
						e.printStackTrace();
					}
					return null;
				}
			}, uid);
			vo.setTotalPrice(totalPrice);
			List<CartItem> datas = cartDao.list("select b.photo,b.bname,b.price,c.count,b.price*c.count subPrice from books b INNER JOIN cart c ON b.bid=c.bid where uid=?", new RowMapper<CartItem>() {

				@Override
				public CartItem oneRowMapper(ResultSet rs) {
					try {
						CartItem cartItem = new CartItem();
						cartItem.setBname(rs.getString("bname"));
						cartItem.setPhoto(rs.getString("photo"));
						cartItem.setPrice(rs.getBigDecimal("price"));
						cartItem.setCount(rs.getInt("count"));
						cartItem.setSubPrice(rs.getBigDecimal("subPrice"));
						return cartItem;
					} catch (SQLException e) {
						e.printStackTrace();
					}
					return null;
				}
				
			}, uid) ;
			vo.setDatas(datas);
			return vo;
		} finally {
			
		}
	}

 

  • 5
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值