08-Springboot电脑网上商城项目-增加商品数量、购物车结算、创建订单

本文详细介绍了如何在SpringBoot项目中实现购物车功能,包括增加商品数量、购物车结算,以及创建订单的全过程。从持久层的SQL设计到控制层的请求实现,再到前端页面的展示,每个步骤都进行了详细阐述,并在订单创建部分加入了AOP统计业务方法耗时的功能。
摘要由CSDN通过智能技术生成

十六、增加购物车商品数量

1 持久层

  1. 规划SQL语句

    //更新t_cart表num值(加入购物车功能已有)
    //判断商品信息是否存在
    select * from t_cart where cid=#{cid}
    
  2. 设计接口和抽象方法

    Cart findCartByCid(Integer cid);
    
  3. 编写xml映射文件

    <select id="findCartByCid" resultMap="cart">
            select * from t_cart where cid=#{cid}
        </select>
    

2 业务层

  1. 设计接口和抽象方法

    Integer addNum(Integer cid,Integer uid,String username);
    
  2. 实现接口和抽象方法

    @Override
    public Integer addNum(Integer cid, Integer uid, String username) {
        Cart cart = cartMapper.findCartByCid(cid);
        if (cart == null){
            throw new CartNotFoundException("购物车商品信息不存在");
        }
        Integer num = cart.getNum()+1;
        Integer integer = cartMapper.updateCart(cid, num, username, new Date());
        if (integer != 1){
            throw new UpdateException("增加购物车商品数量时发生异常");
        }
        return num;
    }
    

3 控制层

  1. 设计请求

    /url/{
         cid}/num/add
    post
    Integer cid,HttpSession session
    JsonResult<Integer>
    
  2. 实现请求

@RequestMapping("{cid}/add/num")
public JsonResult<Integer> addNum(Integer cid,HttpSession session){
    Integer data = cartService.addNum(cid, getUidFromSession(session), getUsernameFromSession(session));
    return new JsonResult<>(OK,data);
}

十七、购物车结算

1 持久层

  1. 规划SQL语句

    select 
    	cid,uid,pid,
    	t_cart.price,t_cart.num,
    	t_product.title,t_product.image,
    	t_product.price as realPrice
    from 
    	t_cart left join t_product on t_cart.pid=t_product.id
    where 
    	cid in (?,?,?)
    order by 
    	t_cart.craeted_time desc
    
  2. 设计接口和抽象方法

    List<CartVO> findOVByCid(Integer[] cid);
    
  3. 编写xml映射

        <select id="findOVByCid" resultType="com.cy.store.vo.CartVO">
            select
                cid,
                uid,
                pid,
                t_cart.price,
                t_cart.num,
                t_product.title,
                t_product.image,
                t_product.price as realPrice
            from
                t_cart left join t_product on t_cart.pid=t_product.id
            where
                cid in (
                    <foreach collection="array" item="cid" separator=",">
                        #{cid}
                    </foreach>
                    )
            order by
                t_cart.created_time desc
        </select>
    

2 业务层

  1. 设计接口和抽象方法

    List<CartVO> getOVByCid(Integer uid,Integer[] cid);
    
  2. 实现接口和方法

    @Override
        public List<CartVO> getOVByCid(Integer uid, Integer[] cid) {
            List<CartVO> list = cartMapper.findOVByCid(cid);
            Iterator<CartVO> it = list.iterator();
            while (it.hasNext()){
                CartVO cartVO = it.next();
                if (!cartVO.getUid().equals(uid)){
                    list.remove(cartVO);
                }
            }
            return list;
        }
    

3 控制层

  1. 设计请求

    /carts/list
    POST
    Integer[] cid,HttpSession session
    JsonResult<List<CartOV>>
    
  2. 实现请求

     @RequestMapping("list")
        public JsonResult<List<CartVO>> getCartList(Integer[] cid, HttpSession session){
            List<CartVO> data = cartService.getOVByCid(getUidFromSession(session), cid);
            return new JsonResult<>(OK,data);
        }
    

4 前端页面

//orderConfirm.html
<script type="text/javascript">
    $(document).ready(function (
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值