当前位置: 首页 > news >正文

SpringBoot电脑商城项目--显示购物车列表

1. 显示购物车列表-持久层

1.1 规划sql语句

        在购物车表中查询用户id,商品id,购物车商品的数量,在商品表中从查询商品的价格,图片

select cid,
               uid,
               pid,
               t_cart.num,
               t_product.title,
               t_product.price,
               t_product.image,
               t_product.price  AS realPrice
        from t_cart
                 LEFT JOIN t_product ON t_cart.pid = t_product.pid
        where uid=#{uid}
        order by
            t_cart.created_time desc

1.2 CartMapper编写接口和抽象方法

        前端展示购物车列表时,需要展示商品的图片信息和购物车的价格数量等信息,根据用户id查询购物车信息和商品信息后,不管是返回cart对象还是product对象都不合适,pojo实体类不能包含多表查询出来的结果

        创建一个vo对象。当进行select查询时,直接使用一个pojo类来接收

CartVo实体类

package com.cy.store.vo;import lombok.Data;import java.io.Serializable;/** 购物车数据的Value Object类 */
@Data
public class CartVO implements Serializable {private Integer cid;private Integer uid;private Integer pid;private Long price;private Integer num;private String title;private Long realPrice;private String image;
}

CartMapper类

    /*** 查询某用户的购物车数据* @param uid 用户id* @return 匹配的购物车数据*/List<CartVO> findVOByUid(Integer uid);

1.3 xml文件中编写sql映射

    <select id="findVOByUid" resultType="com.cy.store.vo.CartVO">select cid,uid,pid,t_cart.num,t_product.title,t_product.price,t_product.image,t_product.price  AS realPricefrom t_cartLEFT JOIN t_product ON t_cart.pid = t_product.idwhere uid=#{uid}order byt_cart.created_time desc</select>

1.4 进行对持久层的测试

@Testpublic void findVOByUid() {Integer uid = 1;List<CartVO> list = cartMapper.findVOByUid(uid);System.out.println(list);}

2. 显示购物车列表-业务层

2.1 编写接口和抽象方法

    /*** 根据aid查询收货地址数据* @param uid 用户id* @return 匹配的收货地址数据,如果没有匹配的数据则返回null*/List<CartVO> findVOByAid(Integer uid);

2.2 实现类实现接口,重写抽象方法

/*** 查询某用户的购物车数据* @param uid* @return*/@Overridepublic List<CartVO> findVOByAid(Integer uid) {List<CartVO> list = cartMapper.findVOByUid(uid);return list;}

3. 显示购物车列表-控制层

3.1 规划请求

请求路径:/carts/

请求方式:GET

请求参数:HttpSession session

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

3.2 实现请求

    /*** 获取购物车数据* @param session* @return*/@RequestMappingpublic JsonResult<List<CartVO>> getVOByAid(HttpSession session) {Integer uid = getUidFromSession(session);List<CartVO> data = cartService.findVOByAid(uid);return new JsonResult<>(OK, data);}

3.3 启动项目进行测试

4. 前端页面

4.1 注释掉cart.js文件


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

4.2 js业务代码

<script type="text/javascript">
<!--		当页面加载时发送获取购物车列表的请求		-->$(document).ready(function() {showCartList();});//展示购物车列表数据function showCartList() {// 清空数据区$("#cart-list").empty();$.ajax({url: "/carts",type: "GET",dataType: "JSON",success: function(json) {var list = json.data;// 遍历后端响应过来的数据for (var i = 0; i < list.length; i++) {// 给数据进行占位var tr = '<tr>\n' +'<td>\n' +'<input name="cids" value="#{cid}" type="checkbox" class="ckitem" />\n' +'</td>\n' +'<td><img src="..#{image}collect.png" class="img-responsive" /></td>\n' +'<td>#{title}#{msg}</td>\n' +'<td>¥<span id="goodsPrice#{cid}">#{singlePrice}</span></td>\n' +'<td>\n' +'<input type="button" value="-" class="num-btn" onclick="reduceNum(1)" />\n' +'<input id="goodsCount#{cid}" type="text" size="2" readonly="readonly" class="num-text" value="#{num}">\n' +'<input class="num-btn" type="button" value="+" onclick="addNum(#{cid})" />\n' +'</td>\n' +'<td><span id="goodsCast#{cid}">#{totalPrice}</span></td>\n' +'<td>\n' +'<input type="button" onclick="delCartItem(this)" class="cart-del btn btn-default btn-xs" value="删除" />\n' +'</td>\n' +'</tr>';// 赋值tr = tr.replaceAll(/#{cid}/g, list[i].cid);tr = tr.replaceAll(/#{image}/g, list[i].image);tr = tr.replaceAll(/#{title}/g, list[i].title);tr = tr.replaceAll(/#{singlePrice}/g, list[i].realPrice);tr = tr.replaceAll(/#{num}/g, list[i].num);tr = tr.replaceAll(/#{totalPrice}/g, list[i].realPrice * list[i].num);if (list[i].realPrice < list[i].price) {tr = tr.replace(/#{msg}/g, "比加入时降价" + (list[i].price - list[i].realPrice) + "元");} else {tr = tr.replace(/#{msg}/g, "");}// 每次遍历完数据,就往页面中添加一行数据$("#cart-list").append(tr);}},error: function (xhr) {alert("加载购物车列表数据时产生未知的异常"+xhr.status);}});}// $(function() {// 	//返回链接// 	$(".link-account").click(function() {// 		location.href = "orderConfirm.html";// 	})// })</script>

相关文章:

  • 【无标题】使用 Chocolatey 安装 WSL 管理工具 LxRunOffline
  • win环境使用openssl创建p12证书
  • emscripten 编译 wasm 版本的 openssl
  • 启动hardhat 项目,下载依赖的npm问题
  • 【系统问题】解决 Windows10 点击任务栏的音量图标(喇叭)无效
  • 文生视频(Text-to-Video)
  • opencv try-catch
  • OCCT基础类库介绍:Modeling Algorithm - Features
  • 【STM32】STM32的中断系统寄存器NVIC、EXTI
  • Hologres 使用 FDW
  • 1、自然语言处理任务全流程
  • 内容搜索软件AnyTXT.Searcher忘记文件名也能搜,全文检索 1 秒定位文件
  • Snapchat矩阵运营新策略:亚矩阵云手机打造高效社交网络
  • 【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)
  • 文件上传优化(图片压缩)
  • 【StarRocks系列】join查询优化
  • 从0开始学习R语言--Day28--高维回归
  • Keil 安装 CMSIS-FreeRTOS 失败解决方案
  • ByteMD Markdown编辑器详细解释修改编辑器默认样式(高度300px)
  • 张之瞳全新单曲《6:30am》上线:以音乐定格青春遗憾中的诗意守望
  • 自己制作宣传图片/正规seo关键词排名网络公司
  • 交做网贷的网站/平台代运营是什么意思
  • 北京工商代办服务公司/关键词排名优化技巧
  • 成都科技网站建设联系电话/广告投放公司
  • 直通车代运营/网站优化排名软件哪些最好
  • 设计一个校园网方案/牛排seo