《尚品甄选》:后台系统——分类品牌和规格管理(debug一遍)

文章目录

  • 一、分类品牌管理
    • 1.1 表结构介绍
    • 1.2 列表查询
    • 1.3 添加功能
    • 1.4 修改功能
    • 1.5 删除功能
  • 二、商品规格管理
    • 2.1 表结构介绍
    • 2.2 列表查询
    • 2.3 添加功能
    • 2.4 修改功能
    • 2.5 删除功能

一、分类品牌管理

分类品牌管理就是将分类的数据和品牌的数据进行关联,分类数据和品牌数据之间的关系是多对多的关系,因此需要单独使用一张数据表来存储该数据。这一部分内容整体上较为简单。

1.1 表结构介绍

CREATE TABLE `category_brand` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',`brand_id` bigint DEFAULT NULL COMMENT '品牌ID',`category_id` bigint DEFAULT NULL COMMENT '分类ID',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0:可用 1:不可用)',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='分类品牌'

1.2 列表查询

在这里插入图片描述
需求说明:
如果在搜索表单中选择了某一个品牌以及分类,那么此时就需要按照品牌id和分类id进行查询;并且搜索的时候需要进行分页搜索。


接口说明:

  • 品牌列表接口:当页面加载完毕以后需要请求后端接口查询出系统中所有的品牌数据,将品牌数据在搜索表单的品牌下拉框中进行展示。
  • 分类品牌条件分页查询接口。

先来debug品牌列表接口,先来到controller
在这里插入图片描述
来到业务层,调用mapper接口,查询数据库
在这里插入图片描述
SQL语句编写如下:

    @Select("select * from brand where is_deleted = 0 order by id desc")List<Brand> findAll();

再接着debug分类品牌条件分页查询接口,首先来看一下需求分析

  • 前端提交请求参数的时候包含了两部分的参数:搜索条件参数、分页参数。后端查询完毕以后需要给前端返回一个分页对象,分页对象中封装了分页相关的参数。前端进行参数传递的时候,不一定会传递搜索条件,因此sql语句的编写需要使用到动态sql

在这里插入图片描述

继续debug,来到controller层,获取前端传来的品牌id值
在这里插入图片描述
业务层进行分页,调用mapper接口,查询数据库,我这里查询到了两条数据。
在这里插入图片描述
SQL语句编写有些复杂,涉及到三表查询,如下所示:

<!--    List<CategoryBrand> findByPage(CategoryBrandDto categoryBrandDto);--><select id="findByPage" resultType="com.atguigu.spzx.model.entity.product.CategoryBrand">select cb.id,cb.brand_id,cb.category_id,cb.create_time,cb.update_time,c.name as categoryName,b.name as brandName,b.logofrom category_brand cbleft join category c on c.id = cb.category_idleft join brand b on b.id = cb.brand_id<where>cb.is_deleted = 0<if test="brandId != null and brandId != ''">and cb.brand_id = #{brandId}</if><if test="categoryId != null and categoryId != ''">and cb.category_id = #{categoryId}</if></where>order by cb.id desc</select>

1.3 添加功能

需求说明:
当用户点击添加按钮的时候,在对话框中需要展示添加分类品牌表单。当用户在该表单中点击提交按钮的时候那么此时就需要将表单进行提交,在后端需要将提交过来的表单数据保存到数据库中即可。如下所示:
在这里插入图片描述
代码很简单,业务层就是做新增数据操作,这里给出SQL语句:

    @Insert("insert into category_brand values(#{id}, #{brandId}, #{categoryId}, now(), now(), 0)")void save(CategoryBrand categoryBrand);

1.4 修改功能

需求说明:
当用户点击修改按钮的时候,在对话框中需要将当前行所对应的分类品牌数据在该表单页面进行展示。当用户在该表单中点击提交按钮的时候那么此时就需要将表单进行提交,在后端需要提交过来的表单数据修改数据库中的即可。效果如下所示:
在这里插入图片描述
debug到controller层,获取到前端传来的数据,可以看到,修改后的分类名是工艺礼品乐器,其分类id值是703。
在这里插入图片描述
业务层通过mapper接口修改数据库
在这里插入图片描述
修改数据库对应的SQL语句如下:

<!--    void updateById(CategoryBrand categoryBrand);--><update id="updateById">update category_brand set<if test="brandId != null and brandId != ''">brand_id = #{brandId},</if><if test="categoryId != null and categoryId != ''">category_id = #{categoryId},</if>update_time = now()whereid = #{id}</update>

1.5 删除功能

需求说明:
当点击删除按钮的时候此时需要弹出一个提示框,询问是否需要删除数据?如果用户点击是,那么此时向后端发送请求传递id参数,后端接收id参数进行逻辑删除。效果如下所示:
在这里插入图片描述
删除功能的代码也很简单,业务层就是主要执行修改字段is_deleted = 1的操作,这里给出SQL语句:

    @Update("update category_brand set is_deleted = 1, update_time = now() where id = #{id}")void deleteById(Long id);

二、商品规格管理

在电商项目中,商品规格指的是商品属性、型号、尺寸、颜色等具体描述商品特点和属性的标准化信息。

2.1 表结构介绍

CREATE TABLE `product_spec` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',`spec_name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '规格名称',`spec_value` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '规格值:"[{"key":"颜色","valueList":["蓝","白","红"]]"',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0:可用 1:不可用)',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品规格'

2.2 列表查询

需求说明:
当产品规格管理页面加载完毕后就向后端发送分页查询请求,后端进行分页查询,返回分页结果数据。
在这里插入图片描述
接着debug,来到controller层,获取前十条数据
在这里插入图片描述
业务层调用mapper接口,查询所有数据,并进行分页
在这里插入图片描述
SQL语句编写如下:

    @Select("select * from product_spec where is_deleted = 0 order by id desc")List<ProductSpec> findByPage();

2.3 添加功能

需求说明:
用户点击添加按钮,此时需要展示一个添加数据的表单对话框,用户填写表单数据,点击提交按钮,请求后端接口完成数据的保存操作。效果如下所示:
在这里插入图片描述
debug来到controller层,可以看到,实体类接收到了规格名称和规格
在这里插入图片描述
业务层调用mapper接口,将数据插入数据库
在这里插入图片描述
SQL语句编写如下,就是一个简单的新增操作:

    @Insert("insert into product_spec values (#{id}, #{specName}, #{specValue}, now(), now(), 0)")void save(ProductSpec productSpec);

2.4 修改功能

需求说明:
当用户点击修改按钮的时候,在对话框中需要将当前行所对应的产品规格数据在该表单页面进行展示。当用户在该表单中点击提交按钮的时候那么此时就需要将表单进行提交,在后端需要提交过来的表单数据修改数据库中的即可。效果如下所示:
在这里插入图片描述
SQL代码编写如下:

<update id="updateById" >update product_spec set<if test="specName != null and specName != ''">spec_name = #{specName},</if><if test="specValue != null and specValue != ''">spec_value = #{specValue},</if>update_time =  now()whereid = #{id}
</update>

2.5 删除功能

需求说明:
当点击删除按钮的时候此时需要弹出一个提示框,询问是否需要删除数据?如果用户点击是,那么此时向后端发送请求传递id参数,后端接收id参数进行逻辑删除。效果如下所示:
在这里插入图片描述
因为本质上也是一个修改语句,因此业务层只是SQL语句的不同,SQL编写如下:

    @Update("update product_spec set is_deleted = 1, update_time = now() where id = #{id}")void deleteById(Long id);

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

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

相关文章

HTTP /1.0 /1.1 /2.0 /3.0改变和区别

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输超文本的协议&#xff0c;它是Web上数据通信的基础。不同版本的HTTP协议有一些重要的变化和改进。以下是HTTP/1.0、HTTP/1.1、HTTP/2.0和HTTP/3.0的主要变化和区别&#xff1a; HTTP/1.0: 1.无连接性&…

Python面经【7】

Python面经【7】 一、存入字典里的数据有没有先后排序二、lambda表达式格式以及应用场景三、如何理解Python中字符中的字符四、介绍一下except的作用和用法五、在 except 中 return 后还会不会执行 finally 中的代码&#xff1f;怎么抛出自定义异常六、read、readline和readlin…

美团YOLOv6量化部署实战方案

文章目录 1. 背景和难点2. 量化方案实战2.1 重参数化优化器2.1.1 RepOpt2.1.2 RepOpt 版本的 PTQ2.1.3 RepOpt 版本的 QAT2.2 基于量化敏感度分析的部分量化2.3 基于通道蒸馏的量化感知训练2.3.1 通道蒸馏2.3.2 YOLOv6 量化感知蒸馏框架3. 部署时优化3.1 图优化3.1.1 性能分析3…

【java】图书管理系统

完整代码链接&#xff1a;https://gitee.com/zeng-xuehui/Java_repository/tree/master/test_11_27_1/src我们在写这个系统时&#xff0c;首先需要搭建框架&#xff0c;再实现业务逻辑&#xff1b;图书管理系统是用户通过各种功能对图书进行操作的一个系统&#xff1b;我们需要…

【腾讯地图】【微信小程序】地图选点

【相关文章】 【腾讯地图】【微信小程序】地图选点 【腾讯地图】【微信小程序】路线规划 【腾讯地图】【微信小程序】城市记录&#xff08;基于地图选点入门版&#xff09; 【效果展示】 【官方文档】 微信小程序插件-地图选点插件 【完善流程】 当前操作和官方文档操作有部…

36 - 电商系统表设计优化案例分析

如果在业务架构设计初期&#xff0c;表结构没有设计好&#xff0c;那么后期随着业务以及数据量的增多&#xff0c;系统就很容易出现瓶颈。如果表结构扩展性差&#xff0c;业务耦合度将会越来越高&#xff0c;系统的复杂度也将随之增加。这一讲我将以电商系统中的表结构设计为例…

vue2+element-ui npm run build打包后,在服务器打开报错

报错 页面的图标也显示不出来&#xff0c;如下 解决&#xff1a; 在build->utils.js文件里面加上publicPath: ../../&#xff0c;再打包发布一下就可以了 // Extract CSS when that option is specified// (which is the case during production build)if (options.extrac…

PCL 判断一个点是否在多边形内部(2D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里实现一种基于点的射线法来判断一个点是否一个多边形的内部,思路其实相对简单,但是很实用。具体内容如下: 首先,我们需要构建一条水平的射线(半无限射线,x增加,但y值不变)。计算它穿过多少条边。在每个与…

【javascript】如何判断一个对象属性是否存在

前言 在javascript里&#xff0c;可以有多种判断对象属性是否存在的方法&#xff0c;使用哪种方法来判断&#xff0c;取决于对 “存在” 两个字的定义是什么。 方法1&#xff1a;对比undefined const obj {} if (obj.id ! undefined) {console.log(存在) } else {console.l…

Spring Cloud Stream如何屏蔽不同MQ带来的差异性?

引言 在当前的微服务架构下&#xff0c;使用消息队列&#xff08;MQ&#xff09;技术是实现服务解耦和削峰填谷的重要策略。为了保证系统的灵活性和可替换性&#xff0c;我们需要避免对单一开源技术的依赖。 市面上有多种消息队列技术&#xff0c;如 Kafka、RocketMQ、Rabbit…

思维模型 达维多定律

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。持续创新&#xff0c;引领市场潮流。 1 达维多定律的应用 1.1 达维多定律应用之吉列公司&#xff1a;不断创新的刀片领导者 吉列公司是一家以剃须刀片而闻名的公司。自 1901 年推出首款安…

【开源视频联动物联网平台】开箱即用的物联网项目介绍

写一个开箱即用的物联网项目捐献给Dromara组织 一、平台简介 MzMedia开源视频联动物联网平台&#xff0c;简单易用&#xff0c;更适合中小企业和个人学习使用。适用于智能家居、农业监测、水利监测、工业控制&#xff0c;车联网&#xff0c;监控直播&#xff0c;慢直播等场景。…

fastadmin 中input 变成搜索变成selectpage

1.column 列中 {field:admin_idss,title:"用户名"&#xff0c;addclass:"selectpage",extend:data-source"auth/admin/index" data-field"nickenames"} 列入&#xff1a; table.bootstrapTable({ url: $.fn.bootst…

【Spring Boot 源码学习】BootstrapRegistryInitializer 详解

Spring Boot 源码学习系列 BootstrapRegistryInitializer 详解 引言往期内容主要内容1. 初识 BootstrapRegistryInitializer2. 加载 BootstrapRegistryInitializer3. BootstrapRegistryInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》&#xff0c;我们从 …

谈一谈大小端

文章目录 一&#xff0c;什么是大小端二&#xff0c;为什么有大小端三&#xff0c;怎么验证大小端 一&#xff0c;什么是大小端 大端存储模式&#xff1a;是指数据的地位存储在高地址处&#xff0c;数据的高位存储在低地址处。 小端存储模式&#xff1a;是指数据的低位存储在低…

从0开始学习JavaScript--JavaScript 单例模式

单例模式是一种常见的设计模式&#xff0c;它保证一个类仅有一个实例&#xff0c;并提供一个全局访问点。在 JavaScript 中&#xff0c;单例模式通常用于创建唯一的对象&#xff0c;以确保全局只有一个实例。本文将深入探讨单例模式的基本概念、实现方式&#xff0c;以及在实际…

矩阵代数与MATLAB实现(特征值、广义特征值、酋矩阵、)

矩阵代数的相关知识 目录 一、特征值与特征向量 1、特征值与特征向量 2、MATLAB计算 二、广义特征值与广义特征向量 1、广义特征值与广义特征向量 2、MATLAB计算 三、酋矩阵 1、酋矩阵 2、MATLAB计算 四、未完待续 总结 提示&#xff1a;以下是本篇文章正文内容&…

Pytorch从零开始实战11

Pytorch从零开始实战——ResNet-50V2算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNet-50V2算法实战环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pyt…

VUE语法-ref和reactive响应式数据引用

1、响应式概述 在vue中定义一个参数&#xff0c;当这个参数在使用中发生了变化&#xff0c;在页面中对这个数据应用的地方都会同步的发生变化&#xff0c;这个就是数据响应式。 2、创建一个非响应式的参数 该程序中采用的是VUE3的用法&#xff1a; 1、在程序中定义了一个局…

GraphCast:基于机器学习的全球中期天气预测模型

文章信息 文章题为”GraphCast: Learning skillful medium-range global weather forecasting”&#xff0c;该文章于2023年发表至Science&#xff0c;文章内容主要关于利用机器学习模型&#xff0c;实现高效、准确的全球中期天气预测。由于文章内容较多&#xff0c;本文仅对研…