显示订单列表【项目 商城】

news2025/3/3 4:31:51

显示订单列表【项目 商城】

  • 前言
  • 显示订单列表
    • 1 持久层
      • 1.1 规划SQL语句
      • 1.2 实现接口与抽象方法
      • 1.3 配置SQL映射
    • 测试
    • 2 业务层
      • 2.1 规划异常
      • 2.2 编写接口与抽象方法
      • 2.3 实现抽象方法
    • 测试
    • 3 控制器
      • 3.1 处理异常
      • 3.2 设计请求
      • 3.3 处理请求
    • 测试
      • 4 前端页面
    • 测试

前言

写作于
2022-10-14 17:16:51

发布于
2022-11-21 20:10:40

显示订单列表

在这里插入图片描述

1 持久层

1.1 规划SQL语句

# 多表查询如果字段名重复则需要显示声明该字段属于那张表
  SELECT oid,uid,recv_name AS recvName,order_time AS orderTime,
               title,image,price,num,status
        FROM t_order LEFT JOIN t_order_item on t_order.oid=t_order_item.oid
        WHERE uid=#{uid}
        ORDER BY t_order.order_time DESC

VO:Value Object,值对象。当进行SELECT查询时,查询的结果属于多张表中的内容,此时发现结果集不能使用某个POJI实体类来接受,POJO实体类不能包含多表查询出来的结果。解决方式是:重新构建一个新的对象用于存储所查询出来的结构集对应的映射,所以把这样的对象称之为值对象


package com.cy.store.vo;

import java.math.BigInteger;
import java.util.Date;
import java.util.Objects;

public class OrderVO {
     private Integer oid;
    private Integer uid;
    private String recvName;
    private Date orderTime;

    private String title;
    private String image;
    private BigInteger totalPrice;
    private Integer num;
    private Integer status;
	//...
}

OrderVO


1.2 实现接口与抽象方法

抽象方法设计

    /**
     * 根据uid查询oids
     * @param uid uid
     * @return oids
     */
    Integer[] findOidsByUid(Integer uid);

    /**
     * 根据oid查询OrderVO
     * @param oid oid
     * @return List<OrderVO>
     */
    List<OrderVO> findVOByOid(Integer oid);

1.3 配置SQL映射

 	<select id="findOidsByUid" resultType="Int">
        SELECT oid
        FROM t_order
        WHERE uid=#{uid}
        ORDER BY t_order.order_time DESC
    </select>

    <select id="findVOByOid" resultType="com.cy.store.vo.OrderVO">
        SELECT t_order.oid,uid,recv_name AS recvName,order_time AS orderTime,
               title,image,price,num,status
        FROM t_order LEFT JOIN t_order_item on t_order.oid=t_order_item.oid
        WHERE t_order.oid=#{oid}
        ORDER BY t_order.order_time DESC
    </select>

OrderMapper–findVOByOid


测试

单元测试。

   @Test
    void findOidsByUid(){
        Integer[] oids = orderMapper.findOidsByUid(8);
        for (Integer o:oids){
            System.out.println(o);
        }
    }

    @Test
    void findVOByOid(){
        List<OrderVO> list = orderMapper.findVOByOid(3);
        for (OrderVO o:list){
            System.out.println(o);
        }

    }

OrderMapperTests–findVOByOid


2 业务层

2.1 规划异常

2.2 编写接口与抽象方法

1.先编写业务层的接口方法。

   /**
     * 根据用户id获取用户的订单
     * @param uid 用户id
     * @return 用户的订单 <oid 订单详情>
     */
    Map<Integer, List<OrderVO>> getVOByUid(Integer uid);

2.3 实现抽象方法

2.在实现类实现此方法。

     @Override
    public Map<Integer, List<OrderVO>> getVOByUid(Integer uid) {
        Map<Integer, List<OrderVO>> map=new LinkedHashMap<>();
        Integer[] oids = orderMapper.findOidsByUid(uid);
        for (Integer o:oids){
            map.put(o,orderMapper.findVOByOid(o));
        }
        return map;
    }

OrderService–getVOByUid


测试

  @Test
    public void getVOByUid(){
        Map<Integer, List<OrderVO>> map = orderService.getVOByUid(8);
        System.out.println(map);
    }

OrderServiceTests–getVOByUid

3 控制器

3.1 处理异常

3.2 设计请求

1.设计请求。

/orders
session
GET
JsonResult<Map<Integer, List<OrderVO>>>

3.3 处理请求

2.实现请求处理方法的代码

  @RequestMapping({"","/"})
    public JsonResult<Map<Integer, List<OrderVO>>> getVOByUid(HttpSession session) {
        Map<Integer, List<OrderVO>> data = orderService.getVOByUid(getuidFromSession(session));
        return new JsonResult<>(OK,data);
    }

CartController–getVOByUid


测试

3.先登录在进行功能测试
http://localhost:8080/orders
在这里插入图片描述

4 前端页面

cart.html
1.注释掉cart.js文件
2.form表单结果。action=“orderConfirm.html”、tbody标签的额id="cart-list"属性、"结算按钮"改成type="button"属性值
3.ready()函数来完成自动的ajax请求的条件和处理。

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

			function showCartList() {
				$("#cart-list").empty();
				$.ajax({
					url: "/carts",
					type: "GET",
					dataType: "JSON",
					success: function(json) {
						let list = json.data;
						for (let i = 0; i < list.length; i++) {
							let tr = '<tr>'
									+ '<td>'
									+ 	'<input name="cids" value="#{cid}" type="checkbox" class="ckitem" />'
									+ '</td>'
									+ '<td><img src="..#{image}collect.png" class="img-responsive" /></td>'
									+ '<td>#{title}#{msg}</td>'
									+ '<td>¥<span id="price-#{cid}">#{realPrice}</span></td>'
									+ '<td>'
									+ 	'<input type="button" value="-" class="num-btn" οnclick="reduceNum(#{cid})" />'
									+ 	'<input id="num-#{cid}" type="text" size="2" readonly="readonly" class="num-text" value="#{num}">'
									+ 	'<input class="num-btn" type="button" value="+" οnclick="addNum(#{cid})" />'
									+ '</td>'
									+ '<td>¥<span id="total-price-#{cid}">#{totalPrice}</span></td>'
									+ '<td>'
									+ 	'<input type="button" οnclick="delCartItem(this)" class="cart-del btn btn-default btn-xs" value="删除" />'
									+ '</td>'
									+ '</tr>';
							tr = tr.replace(/#{cid}/g, list[i].cid);
							tr = tr.replace(/#{title}/g, list[i].title);
							tr = tr.replace(/#{image}/g, list[i].image);
							tr = tr.replace(/#{realPrice}/g, list[i].realPrice);
							tr = tr.replace(/#{num}/g, list[i].num);
							tr = tr.replace(/#{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)
					}
					
				});
			}
			//showCartList

cart.html–showCartList


测试

在这里插入图片描述

READ–显示购物车列表


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】安装与配置(内附安装包+未将对象引用设置到对象的实例的错误解决方法)

目录 一、数据库分类 &#xff08;1&#xff09;关系型数据库&#xff08;RDBMS&#xff09; &#xff08;2&#xff09;非关系型数据库 二、MySQL服务器安装 三、安装包文件分享 一、数据库分类 数据库大体可以分为关系型数据库和非关系型数据库 &#xff08;1&#xff0…

U盘复制错误0x80071ac3如何解决?

U盘是一款移动存储设备&#xff0c;但是在使用中也会遇到一些错误问题&#xff0c;比如文件复制、粘贴或移动时提示0x80071ac3错误代码要如何解决呢&#xff1f;下面就和小编一起来看看解决办法吧。 方法一&#xff1a; 1、有些用户是使用U盘时出现的问题&#xff0c;先按下快捷…

记宝塔使用webhook自动化同步gitee代码

1、服务器ssh密钥 1.1、输入命令查看服务器是否存在密钥&#xff1a; cd ~/.sshls id_xxx.pub的是公钥、id_xxx的是私钥 如果没有&#xff0c;就要先生成一下&#xff0c;生成ssh密钥参考https://gitee.com/help/articles/4181#article-header0 1.2、复制ssh公钥到码云公钥…

【Hack The Box】linux练习-- Blocky

HTB 学习笔记 【Hack The Box】linux练习-- Blocky &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#x1f3…

UE4 回合游戏项目 22- 添加第二个玩家

在上一节&#xff08;UE4 回合游戏项目 21- 添加多种类型的敌人&#xff09;基础上新添加一个玩家角色 效果&#xff1a; 步骤&#xff1a; 1.打开进阶游戏资源&#xff0c;解压“回合迁移_第七节&#xff08;只是新人物包&#xff09;” 2.解压后双击打开工程 3.选中“ziyuan…

如何通过快解析实现外网远程访问JupyterNotebook

什么是Jupyter Notebook&#xff1f;官网介绍&#xff1a;Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算&#xff1a;开发、文档编写、运行代码和展示结果。简单地说&#xff0c;Jupyter Notebook是以网页的形式打开&#xff0c;可以在网页页面…

Spring Boot——yml和properties详解

文章目录1. 配置文件作用2. 配置文件的格式和分类2.1 规则&#xff08;tips&#xff09;2.2 为配置文件安装提示插件3. properties 配置文件说明3.1 properties 基本语法3.2 关于 properties 中文乱码的问题处理&#xff1a;4. 读取 properties 配置文件4.1 读取单个配置文件5.…

Spring @DateTimeFormat日期格式化时注解浅析分享

文章目录总结写前面为什么用怎么用场景一场景二场景三场景四场景五方式一方式二总结写前面 关于它 DateTimeFormat&#xff1a; 可以接收解析前端传入字符时间数据&#xff1b;不能格式化接收的字符时间类型数据&#xff0c;需要的转换格式得配置&#xff1b;入参格式必须与后…

罗丹明PEG羟基,RB-PEG-OH,Rhodamine-PEG-OH

产品名称&#xff1a;罗丹明PEG羟基 英文名称&#xff1a;RB-PEG-OH&#xff0c;Rhodamine-PEG-OH&#xff0c;Rhodamine PEG hydroxyl&#xff0c;RB-PEG-OH CAS&#xff1a;1030-000-8 结构式&#xff1a; 罗丹明吸收波长570 nm,发射波长约595 nm。罗丹明B可追踪粉红色和红…

Git——Git介绍及安装步骤

目录 一、Git概述&#xff1a;分布式版本控制工具 1.1 版本控制介绍 1.1.3为什么需要版本控制&#xff1f; 1.2 版本控制工具 1.2.1 集中式版本控制工具 1.2.2 分布式版本控制工具 1.3 工作机制和代码托管中心&#xff08;远程库&#xff09; 二、Git安装 2.1 官网下载安装…

用物理光学建模演示点阵投影仪的工作原理

摘要 点阵投影仪是启用Apple Face ID的关键组件。 该系统通常由发光单元阵列&#xff0c;透镜和分束光栅组成。 透镜系统与光栅一起投射&#xff0c;并复制阵列光源图案。 在此示例中&#xff0c;我们构建了这种点阵投影仪系统并演示了其工作原理。为进行系统分析&#xff0c;我…

[Java]枚举类

文章目录&#x1f34a; 枚举类理解&#x1f34a; 自定义枚举类&#x1f34a; 使用 enum 关键字定义枚举类&#x1f34a; Enum类的常用方法&#x1f96d; toString()&#x1f96d; Enum.valueOf(Class enumClass, String name)&#x1f96d; valueOf(String name)&#x1f96d; …

艾美捷Bio-Helix BluPAD双LED蓝白光照胶台丨舒适、方便

艾美捷Bio-Helix BluPAD双LED蓝白光照胶台&#xff08;切胶仪&#xff0c;透射仪&#xff09;&#xff0c;适用于各种生命科学研究领域&#xff0c;用于观察和分析核酸和蛋白质。鉴于其对凝胶切割、数据成像和归档等观察后应用的最优化和人性化设计&#xff0c;希望为研究人员提…

搭建包含swift组件的openstack云平台详解

由于今天做实验。。。 安装完成虚拟机仅主机模式和nat模式双网卡后&#xff0c;开启网卡进入界面直接ping百度&#xff0c;ping通直接执行下面操作 开启虚拟机&#xff0c;切换到root模式关闭防火墙 查看防火墙是否开启&#xff0c;如果开启请关闭&#xff08;出现Active: ac…

广东的介绍

附录&#xff1a; 1、画图工具&#xff1a;https://www.ldmap.net/map.html?id97f83161-ce02-4e11-989b-fb6645469320 广东之地 因字幅有限&#xff0c;故先列举最端。 巧合点 分隔各地&#xff0c;却有相同的点&#xff0c;是否有相同的影响因素。广东最南&#xff0c;最…

免费搜题接口

免费搜题接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转&a…

[附源码]计算机毕业设计JAVA基于web鲜花销售系统论文2022

[附源码]计算机毕业设计JAVA基于web鲜花销售系统论文2022 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; …

企业数据集成难?Qlik 与微软助你事半功倍

微软年度峰会 Ignite 2022 落下帷幕&#xff0c;正式推出微软智能数据平台&#xff0c;统一微软旗下数据库、数据分析和管理服务&#xff0c;一个基于微软云合规、安全等优势、云端数据平台 开发服务为核心的生态系统初见雏形。 Qlik 作为微软金牌合作伙伴&#xff0c;其数据…

思考思维(2):《极简思考》结构化思维

前言 之前在架构师成长之路(5)--架构师具备的思维_hguisu的博客-CSDN博客_架构思维能力已经总结过了&#xff0c;这里再次全面总结。 有一种人的口头禅是“我只说三点”&#xff0c;这种人通常很厉害。 有人三句话说明白一件事&#xff0c;有人说半天别人也没听懂在说啥。这是…

SpringCloud微服务(五)——Config分布式配置中心

SpringCloud Config分布式配置中心 SpringCloud 微服务意味着要将单体应用中的业务拆分成一个个子服务&#xff0c;每个服务的粒度相对较小&#xff0c;因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行&#xff0c;所以一套集中式的、动态的配置管理设…