这篇文章主要为大家详细介绍了java网上图书商城,购物车模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了购物车模块的具体代码,供大家参考,具体内容如下
使用的不是session,也不是cookie,而是表
> 添加购物条目
> 删除条目
> 批量删除条目
> 查询勾选的条目
1.数据表
insert into `t_cartitem`(`cartItemId`,`quantity`,`bid`,`uid`,`orderBy`) values ('B8939FC55131469CAB11E3924D40185B',1,'CE01F15D435A4C51B0AD8202A318DCA7','xxx',11);
2.CartItem
public class CartItem { private String cartItemId;// 主键 private int quantity;// 数量 private Book book;// 条目对应的图书 private User user;// 所属用户 // 添加小计方法 public double getSubtotal() { /* * 使用BigDecimal不会有误差 * 要求必须使用String类型构造器 */ BigDecimal b1 = new BigDecimal(book.getCurrPrice() + ""); BigDecimal b2 = new BigDecimal(quantity + ""); BigDecimal b3 = b1.multiply(b2); return b3.doubleValue(); } public String getCartItemId() { return cartItemId; } public void setCartItemId(String cartItemId) { this.cartItemId = cartItemId; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } public Book getBook() { return book; } public void setBook(Book book) { this.book = book; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
小技巧:Java中四舍五入 BigDecimal不会有误差
// 添加小计方法 public double getSubtotal() { /* * 使用BigDecimal不会有误差 * 要求必须使用String类型构造器 */ BigDecimal b1 = new BigDecimal(book.getCurrPrice() + ""); BigDecimal b2 = new BigDecimal(quantity + ""); BigDecimal b3 = b1.multiply(b2); return b3.doubleValue(); }
我的购物车条目中每个条目需要显示图书的图片 书名 单价 ,这说明需要多表查询
public List findByUser(String uid) throws sqlException { String sql = "select * from t_cartitem c, t_book b where c.bid=b.bid and uid=? order by c.orderBy"; List> mapList = qr.query(sql, new MapListHandler(), uid); return toCartItemList(mapList); }
4.添加购物车条目----增
jsp
我要买:件
CartItemServlet
public String add(HttpServletRequest req, HttpServletResponse resp) throws servletexception, IOException { /* * 1. 封装表单数据到CartItem(bid, quantity) */ Map map = req.getParameterMap(); CartItem cartItem = CommonUtils.toBean(map, CartItem.class); Book book = CommonUtils.toBean(map, Book.class); User user = (User)req.getSession().getAttribute("sessionUser"); cartItem.setBook(book); cartItem.setUser(user); cartItemService.add(cartItem); return myCart(req, resp); }
CartItemService
public void add(CartItem cartItem) { try { /* * 1. 使用uid和bid去数据库中查询这个条目是否存在 */ CartItem _cartItem = cartItemDao.findByUidAndBid( cartItem.getUser().getUid(), cartItem.getBook().getBid()); if(_cartItem == null) {//如果原来没有这个条目,那么添加条目 cartItem.setCartItemId(CommonUtils.uuid()); cartItemDao.addCartItem(cartItem); } else {//如果原来有这个条目,修改数量 // 使用原有数量和新条目数量之各,来做为新的数量 int quantity = cartItem.getQuantity() + _cartItem.getQuantity(); // 修改这个老条目的数量 cartItemDao.updateQuantity(_cartItem.getCartItemId(), quantity); } } catch(Exception e) { throw new RuntimeException(e); } }
CartItemDao
public void addCartItem(CartItem cartItem) throws sqlException { String sql = "insert into t_cartitem(cartItemId, quantity, bid, uid)" + " values(?,?,?,?)"; Object[] params = {cartItem.getCartItemId(), cartItem.getQuantity(), cartItem.getBook().getBid(), cartItem.getUser().getUid()}; qr.update(sql, params); }
5.购物车模块页面javascript----查
计算总计
给全选添加click事件
给所有条目的复选框添加click事件
给减号添加click事件
给加号添加click事件
批量删除
list.jsp
cartlist.jsp
您的购物车中暂时没有商品
全选
商品名称
单价
小计
操作
${cartItem.book.bname }
¥${cartItem.book.currPrice }
¥${cartItem.subtotal }
批量删除
总计:¥
小技巧:js中四舍五入round.js
// 5. 把总计显示在总计元素上 $("#total").text(round(total, 2));//round()函数的作用是把total保留2位
jsp
function batchDelete() { // 1. 获取所有被选中条目的复选框 // 2. 创建一数组,把所有被选中的复选框的值添加到数组中 // 3. 指定location为CartItemServlet,参数method=batchDelete,参数cartItemIds=数组的toString() var cartItemIdArray = new Array(); $(":checkBox[name=checkBoxBtn][checked=true]").each(function() { cartItemIdArray.push($(this).val());//把复选框的值添加到数组中 }); location = "/goods/CartItemServlet?method=batchDelete&cartItemIds=" + cartItemIdArray; }
if(quantity == 1) { if(confirm("您是否真要删除该条目?")) { location = "/goods/CartItemServlet?method=batchDelete&cartItemIds=" + id; } } else {
jsp
// 请求服务器,修改数量。 function sendUpdateQuantity(id, quantity) { $.ajax({ async:false, cache:false, url:"/goods/CartItemServlet", data:{method:"updateQuantity",cartItemId:id,quantity:quantity}, type:"POST", dataType:"json", success:function(result) { //1. 修改数量 $("#" + id + "Quantity").val(result.quantity); //2. 修改小计 $("#" + id + "Subtotal").text(result.subtotal); //3. 重新计算总计 showTotal(); } }); }
servlet
public String updateQuantity(HttpServletRequest req, HttpServletResponse resp) throws servletexception, IOException { String cartItemId = req.getParameter("cartItemId"); int quantity = Integer.parseInt(req.getParameter("quantity")); CartItem cartItem = cartItemService.updateQuantity(cartItemId, quantity); // 给客户端返回一个json对象 StringBuilder sb = new StringBuilder("{"); sb.append(""quantity"").append(":").append(cartItem.getQuantity()); sb.append(","); sb.append(""subtotal"").append(":").append(cartItem.getSubtotal()); sb.append("}"); resp.getWriter().print(sb); return null; }