增加购物车商品数量【项目 商城】

简介: 增加购物车商品数量【项目 商城】

增加商品数量



1 持久层

1.1 规划需要执行的SQL语句

1.执行更新t_cart表中记录的num值,无需重复开发。

update t_cart set num=?,modified_user=?,modified_time=? where cid=?

2.根据cid的值查询当前的购物车这条数据是否存在。

select * form t_cart where cid=?

1.2 设计接口与抽象方法

    Cart findByCid(Integer cid);

1.3 配置SQL映射

  <select id="findByCid" resultMap="CartEntityMap">
        SELECT * FROM t_cart WHERE cid=#{cid}
    </select>

CartMapper–findByCid


测试

编写一个单元测试方法。

  @Test
    public void findByCid(){
        System.out.println(cartMapper.findByCid(1));
    }

CartMapperTests–findByCid


2 业务层

2.1 规划异常

1.在更新时会产生更新异常。

2.查询的数据是否有访问的权限。

3.要查询的数据不存在,抛出CartNotFoundException

CartNotFoundException


2.2 设计接口与抽象方法

  /**
     * 更新用户的购物车数据的数量
     * @param cid 购物车id
     * @param uid 用户id
     * @param username 用户名(修改者)
     * @return 增加成功后的新数量
     */
    Integer addNum(Integer cid,Integer uid,String username);

2.3 实现抽象方法

    @Override
    public Integer addNum(Integer cid, Integer uid, String username) {
        Cart result = cartMapper.findByCid(cid);
        if (result==null){
            throw new CartNotFoundException("数据不存在");
        }
        if (!result.getUid().equals(uid)){
            throw new AccessDeniedException("数据非法访问");
        }
        Integer num=result.getNum()+1;
        Integer rows = cartMapper.updateNumByCid(cid, num, username, new Date());
        if (rows!=1){
            throw new UpdateException("更新数据失败");
        }
        //返回新的购物车数据据总量
        return num;
    }

CartServiceImpl–addNum


测试

3 控制层

3.1 处理异常

    else if (e instanceof CartNotFoundException) {
            result.setState(4007);
            result.setMessage("购物车数据不存在的异常");
        }

BaseController–CartNotFoundException


3.2设计请求

/carts/{cid}/num/add
Integer cid,HttpSession session
POST
JsonRest<Integer>

3.3 处理请求

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

测试

http://localhost:8080/carts/4/num/add


4 前端页面

cart.html

      //addNum
      function addNum(cid) {
        $.ajax({
          url: "/carts/" + cid + "/num/add",
          type: "POST",
          dataType: "JSON",
          success: function(json) {
            if (json.state == 200) {
              // showCartList();
              $("#num-" + cid).val(json.data);
              //获取某个标签内部的内容:文本、标签
              let price = $("#price-" + cid).html();
              let totalPrice = price * json.data;
              $("#total-price-" + cid).html(totalPrice);
            } else {
              alert("增加商品数量失败!" + json.message);
            }
          },
          error: function(xhr) {
            alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + xhr.status);
            location.href = "login.html";
          }
        });
      }
      //addNum

cart.html–addNum


测试



减少商品数量

cart–reduceNum


README–增加购物车商品数量

相关文章
|
JavaScript 前端开发
分享24个JS特效广告和66个JS特效在线客服J代码JS代码
分享24个JS特效广告和66个JS特效在线客服J代码JS代码
213 1
|
11月前
|
存储 供应链 分布式数据库
深入理解区块链技术:原理、应用与挑战
本文旨在探讨区块链技术的基本原理、主要应用及其面临的挑战。通过分析区块链的分布式账本技术、加密算法和共识机制,我们揭示了其如何在无需中心化权威的情况下确保数据的不可篡改性和透明性。此外,文章还讨论了区块链在金融、供应链管理、智能合约等领域的应用案例,并指出了当前区块链技术面临的可扩展性、隐私保护和法律监管等挑战。通过对这些内容的深入分析,我们希望为读者提供一个全面而深入的区块链技术概览。
1414 16
|
存储 关系型数据库 MySQL
Mysql存储过程查询结果赋值到变量
Mysql存储过程查询结果赋值到变量
316 0
|
11月前
|
编解码 算法 安全
flv 和 mp4 区别
【10月更文挑战第26天】FLV和MP4格式在容器格式、编码标准、视频质量、兼容性、流媒体支持以及编辑制作等方面都存在一定的区别。用户在选择使用哪种格式时,应根据具体的需求和应用场景来决定。如果注重网络流媒体播放和实时性,FLV格式可能更适合;如果追求更好的视频质量、广泛的兼容性和方便的编辑制作,MP4格式则是更好的选择。
976 10
|
Kubernetes 监控 数据可视化
k8s学习--使用argo-rollouts实现金丝雀发布
k8s学习--使用argo-rollouts实现金丝雀发布
414 1
|
监控 关系型数据库 分布式数据库
PolarDB 读写分离的最佳实践
【8月更文第27天】PolarDB 是阿里云推出的一款高度兼容 MySQL、PostgreSQL 和 Oracle 的云原生数据库服务。它支持读写分离,能够显著提高应用的性能和响应速度。本文将详细介绍如何在 PolarDB 中实施读写分离策略,并通过示例代码演示具体的配置步骤。
456 1
|
Kubernetes 前端开发 Serverless
阿里云云效操作报错合集之在加载Kubernetes配置文件时出现报错,是什么导致的
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
移动开发 小程序 PHP
分享88个新闻文章PHP源码,总有一款适合你
分享88个新闻文章PHP源码,总有一款适合你
298 1
|
NoSQL 安全 Linux
Redis 从入门到精通之内存和CPU配置优化
Redis 是一种基于内存的数据存储系统,因此内存的规划是非常重要的。在配置 Redis 内存时,应该避免物理内存使用过量导致大量使用 Swap,同时需要考虑内存碎片的问题。根据多年的经验整理了一些建议
1345 116
WP-AutoPostPro WordPress自动采集发布插件
WP-AutoPostPro 是目前最好用的WordPress自动采集发布插件,最大的特点是可以采集来自于任何网站的内容并自动发布到你的WordPress站点。真正做到可以采集任何网站的内容并自动发布,采集过程完全自动进行无需人工干预,并提供内容过滤、HTML标签过滤、关键词替换、自动链接、自动标签、自动下载远程图片到本地服务器、自动添加文章前缀后缀、并且可以使用微软翻译引擎将采集的文章自动翻译为各种语言进行发布。
347 0