基于springboot框架的电脑商城项目(九)

简介: 显示勾选的购物车信息(一)显示勾选的购物车信息(持久层)1.规划sql用户在购物车列表页中通过随机勾选相关的商品,在点击"结算"按钮后跳转到"确认订单页",在这个页面中需要展示用户在上个页面所勾选的"购物车列表页"中对应的数据.且展示的内容还是来自于购物车表,所以"购物车列表页"需要将用户勾选的商品id传递给"确认订单页"

显示勾选的购物车信息

(一)显示勾选的购物车信息(持久层)

1.规划sql

用户在购物车列表页中通过随机勾选相关的商品,在点击"结算"按钮后跳转到"确认订单页",在这个页面中需要展示用户在上个页面所勾选的"购物车列表页"中对应的数据.且展示的内容还是来自于购物车表,所以"购物车列表页"需要将用户勾选的商品id传递给"确认订单页"

select
    cid,
    uid,
    pid,
    t_cart.price,
    t_cart.num,
    title,
    t_product.price as realPrice,
    image
from t_cart
left join t_product on t_cart.pid = t_product.id
where
  cid in (?,?,?)
order by
  t_cart.created_time desc

2.设计接口和抽象方法

在CartMapper接口中添加findByCid2抽象方法

    List<CartVo> findByCid2(Integer[] cids);

在CartMapper.xml文件中添加SQL语句的映射配置

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

foreach循环就是一个for循环
collection标识循环的是list集合还是数组,如果是list集合就用collection=“list”
item用来接收每次循环获取的值
separator标识循环出来的值中间用什么隔开,且最后循环出来的值后面不加

(二)显示勾选的购物车信息(业务层)

1.规划异常

查询语句,没有需要规划的异常,在业务层判断这几条购物车商品的数据归属是否正确,如果不正确也不需要抛出异常,直接从查询到的数据中移除该商品就行了

2.设计接口和抽象方法及实现

在ICartService接口中添加getByCids()抽象方法

    List<CartVo> getByCids(Integer uid,Integer[] cids);

在CartServiceImpl类中重写业务接口中的抽象方法

  @Override
    public List<CartVo> getByCids(Integer uid, Integer[] cids) {
        List<CartVo> result = cartMapper.findByCid2(cids);
        if (result==null){
            throw new CartNotFoundException("商品不存在");
        }
        Iterator<CartVo> iterator = result.iterator();
        while (iterator.hasNext()){
            CartVo cartVo = iterator.next();
            Integer uid1 = cartVo.getUid();
            if (!uid1.equals(uid)){
                result.remove(cartVo);
                throw new AccessDeniedException("数据访问异常");
            }
        }
        return result;
    }

(三)显示勾选的购物车信息(控制层)

1.处理异常

没有异常需要处理

2.设计请求

请求路径:/carts/list

请求方式:GET

请求参数:Integer[] cids, HttpSession session

响应结果:JsonResult<List< CartVO>>

3.处理请求

在CartController类中添加处理请求的findVOByCids()方法。

@GetMapping("/list")
    public JsonResult<List<CartVo>> findVOByCids(Integer[] cids,HttpSession session){
    List<CartVo> cartVoList = cartService.getByCids(getuidfromsession(session), cids);
    return new JsonResult<>(ok,cartVoList);
}

(四)显示勾选的购物车信息(前端页面)

orderConfirm.js文件在orderConfirm.html页面中无用,所有在orderConfirm.html中注释掉

<!--    <script src="../js/orderConfirm.js" type="text/javascript" charset="utf-8"></script>-->

在orderConfirm.html页面编写js代码

<script type="text/javascript">
      $(document).ready(function() {
        showCartList();
      });
      function showCartList() {
        $("#cart-list").empty();
        $.ajax({
          url: "/carts/list",
          type: "GET",
          data: location.search.substr(1),
          dataType: "JSON",
          success: function(json) {
            if (json.state == 200) {
              var list = json.data;
              console.log(location.search.substr(1));//调试用
              //声明两个变量用于更新"确认订单"页的总件数和总价
              var allCount = 0;
              var allPrice = 0;
              for (var i = 0; i < list.length; i++) {
                var tr = '<tr>\n' +
                    '<td><img src="..#{image}collect.png" class="img-responsive" /></td>\n' +
                    '<td>#{title}</td>\n' +
                    '<td>¥<span>#{price}</span></td>\n' +
                    '<td>#{num}</td>\n' +
                    '<td><span>#{totalPrice}</span></td>\n' +
                    '</tr>';
                tr = tr.replace("#{image}",list[i].image);
                tr = tr.replace("#{title}",list[i].title);
                tr = tr.replace("#{price}",list[i].realPrice);
                tr = tr.replace("#{num}",list[i].num);
                tr = tr.replace("#{totalPrice}",list[i].realPrice*list[i].num);
                $("#cart-list").append(tr);
                //更新"确认订单"页的总件数和总价
                allCount += list[i].num;
                allPrice += list[i].realPrice*list[i].num;
              }
              $("#all-count").html(allCount);
              $("#all-price").html(allPrice);
            }
          },
          error: function (xhr) {
            alert("在确认订单页加载勾选的购物车数据时发生未知的异常"+xhr.status);
          }
        });
      }
    </script>


订单显示收货地址

1.在orderConfirm.html页面中的ready函数中添加showAddressList方法的调用,使确认订单页加载时能够自动从后端获取该用户地址填充到select控件中并将第一个地址显示出来

$(document).ready(function() {
    showCartList();
    showAddressList();
});

2.在orderConfirm.html页面中编写showAddressList方法

function showAddressList() {
    $("#address-list").empty();
    $.ajax({
        url: "/addresses",
        type: "GET",
        dataType: "JSON",
        success: function(json) {
            if (json.state == 200) {
                var list = json.data;
                for (var i = 0; i < list.length; i++) {
                    /*
                                value="#{aid}"在该模块没有用,但是扔写上,只要是从数据库查到到的数据,都要让前端页
                                面的该条数据和id绑定(因为可能干别的什么时需要用到,就比如说下一个"创建订单"模块
                                就需要根据前端传给后端的aid查询用户选中的是哪一个地址然后将其加入订单表)
                     * */
                    var opt = '<option value="#{aid}">#{name}&nbsp;&nbsp;&nbsp;#{tag}&nbsp;&nbsp;&nbsp;#{provinceName}#{cityName}#{areaName}#{address}&nbsp;&nbsp;&nbsp;#{tel}</option>';
                    opt = opt.replace("#{aid}",list[i].aid);
                    opt = opt.replace("#{name}",list[i].name);
                    opt = opt.replace("#{tag}",list[i].tag);
                    opt = opt.replace("#{provinceName}",list[i].provinceName);
                    opt = opt.replace("#{cityName}",list[i].cityName);
                    opt = opt.replace("#{areaName}",list[i].areaName);
                    opt = opt.replace("#{address}",list[i].address);
                    opt = opt.replace("#{tel}",list[i].tel);
                    $("#address-list").append(opt);
                }
            }
        },
        error: function (xhr) {
            alert("在确认订单页加载用户地址时发生未知的异常"+xhr.status);
        }
    });
}

后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹











































相关文章
|
18天前
|
XML 安全 Java
|
21天前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
28 0
|
1月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
4天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
23 5
|
14天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
46 8
|
24天前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
44 6
|
29天前
|
Java 数据库连接 数据库
不可不知道的Spring 框架七大模块
Spring框架是一个全面的Java企业级应用开发框架,其核心容器模块为其他模块提供基础支持,包括Beans、Core、Context和SpEL四大子模块;数据访问及集成模块支持数据库操作,涵盖JDBC、ORM、OXM、JMS和Transactions;Web模块则专注于Web应用,提供Servlet、WebSocket等功能;此外,还包括AOP、Aspects、Instrumentation、Messaging和Test等辅助模块,共同构建强大的企业级应用解决方案。
51 2
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
80 2
|
1月前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
109 1
|
28天前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
31 0
下一篇
DataWorks