分类和品牌关联

文章目录

    • 1.数据库表设计
        • 1.多表关联设计
        • 2.创建表
    • 2.使用renren-generator生成CRUD
        • 1.基本配置检查
          • 1.generator.properties
          • 2.application.yml
        • 2.生成代码
          • 1.进入localhost:81生成代码
          • 2.将main目录覆盖sunliving-commodity模块的main目录
        • 3.代码检查
          • 1.注释掉CategoryBrandRelationController.java的@RequiresPermissions注解即可
          • 2.接口测试(通过网关访问)
            • 1.http://localhost:5050/api/sunliving-commodity/commodity/categorybrandrelation/list
            • 2.http://localhost:5050/api/sunliving-commodity/commodity/categorybrandrelation/save
    • 3.第五次部署
        • 1.后端部署
          • 1.由于没有添加新模块,所以不需区分多环境,网关也不需要改
          • 2.将sunliving-commodity模块激活为prod
          • 3.maven打包
          • 4.测试执行
          • 5.部署上线
          • 6.启动成功
        • 2.前端部署
          • 1.根目录打包
          • 2.切换到node16,dist目录执行serve
          • 3.Nacos将上线四个后端项目
          • 4.测试无误
          • 5.部署上线
          • 6.测试依然无误
    • 4.前端显示界面 brand.vue
        • 1.新增关联分类的按钮
          • 1.新增按钮
          • 2.实现方法
        • 2.引入品牌和分类关联的对话框
          • 1.最后的div前面引入
          • 2.数据池中定义信息
          • 3.方法显示对话框
        • 3.显示关联分类的级联菜单
          • 1.添加方法,获取分类列表,带层级
          • 2.初始化时调用这个方法
          • 3.结果展示
    • 5.添加分类关联
        • 1.前端 brand.vue
          • 1.点击关联分类按钮,将品牌id放到数据池的brandId中
          • 2.编写addBrandCategoryRelation,发送新增关联的请求
        • 2.后端 sunliving-commodity模块
          • 1.service层
            • 1.CategoryBrandRelationService.java 新增方法
            • 2.CategoryBrandRelationServiceImpl.java 实现方法
          • 2.controller层
            • CategoryBrandRelationController.java 编写接口
        • 3.测试
        • 4.两个小问题
          • 1.添加成功之后关闭弹窗
          • 2.下一次点击新增关联时不保存上一次记录
    • 6.显示分类关联列表
        • 1.后端sunliving-commodity模块
          • 1.service层
            • 1.CategoryBrandRelationService.java
            • 2.CategoryBrandRelationServiceImpl.java
          • 2.controller层
          • 3.测试
        • 2.前端 brand.vue
          • 1.找到列表绑定的属性
          • 2.找到点击关联按钮触发的方法,为属性赋值
          • 3.查看结果
        • 3.几个小问题
          • 1.在新增关联之后并没有刷新分类列表
            • 1.只需在addBrandCategoryRelation这个新增关联的方法操作成功后刷新表格即可
            • 2.展示
          • 2.已经有关联了,但是还会重复插入的问题
            • 1.修改后端CategoryBrandRelationServiceImpl.java的saveRelationById方法,先检测是否表中已经有关联信息了
            • 2.重启测试
    • 7.删除分类关联列表
        • 1.后端sunliving-commodity模块
          • 1.CategoryBrandRelationController.java 已经提供了根据id删除的接口
        • 2.前端brand.vue
          • 1.发现移除按钮,使用的是插槽机制,可以直接获取当前行的id和brandId
          • 2.编写deleteCateRelationHandle方法
          • 3.测试

1.数据库表设计

1.多表关联设计

image-20240418195253885

2.创建表
use sunliving_commodity;CREATE TABLE commodity_category_brand_relation
(id            BIGINT NOT NULL AUTO_INCREMENT,brand_id      BIGINT COMMENT '品牌 id',category_id   BIGINT COMMENT '分类 id',brand_name    VARCHAR(255) COMMENT '品牌名称',category_name VARCHAR(255) COMMENT '分类名称',PRIMARY KEY (id)
) CHARSET = utf8mb4 COMMENT ='品牌分类关联表';SELECT *
FROM `commodity_category_brand_relation`;

2.使用renren-generator生成CRUD

1.基本配置检查
1.generator.properties

image-20240418195944810

2.application.yml

image-20240418200023765

2.生成代码
1.进入localhost:81生成代码

image-20240418200124912

2.将main目录覆盖sunliving-commodity模块的main目录

image-20240418200502230

image-20240418200552845

3.代码检查
1.注释掉CategoryBrandRelationController.java的@RequiresPermissions注解即可

image-20240418200917839

2.接口测试(通过网关访问)
1.http://localhost:5050/api/sunliving-commodity/commodity/categorybrandrelation/list

image-20240418201554073

2.http://localhost:5050/api/sunliving-commodity/commodity/categorybrandrelation/save

image-20240418202057349

3.第五次部署

1.后端部署
1.由于没有添加新模块,所以不需区分多环境,网关也不需要改
2.将sunliving-commodity模块激活为prod
3.maven打包

image-20240418203435669

4.测试执行

image-20240418203605883

5.部署上线

image-20240418203829855

6.启动成功

image-20240418203911794

2.前端部署
1.根目录打包

image-20240418204118744

2.切换到node16,dist目录执行serve

image-20240418204217618

3.Nacos将上线四个后端项目

image-20240418204330705

4.测试无误

image-20240418204522400

5.部署上线

image-20240418204826925

6.测试依然无误

image-20240418204953485

4.前端显示界面 brand.vue

1.新增关联分类的按钮
1.新增按钮

image-20240419093623315

2.实现方法

image-20240419093711833

2.引入品牌和分类关联的对话框
1.最后的div前面引入
    <!-- 品牌和分类关联的对话框 --><el-dialog title="关联分类" :visible.sync="cateRelationDialogVisible" width="30%"><el-popover placement="right-end" v-model="popCatelogSelectVisible"><!-- <category-cascader :catelogPath.sync="catelogPath"></category-cascader>--><!-- 这里我们加入分类的 Cascader 级联选择器, 前面我们使用过 --><el-cascaderv-model="cascadedCategoryId" :options="categorys" :props="props"></el-cascader><div style="text-align: right; margin: 0"><el-button size="mini" type="text" @click="popCatelogSelectVisible = false">取 消</el-button><el-button type="primary" size="mini" @click="addBrandCategoryRelation"> 确 定</el-button></div><el-button slot="reference">新增关联</el-button></el-popover><el-table :data="cateRelationTableData" style="width: 100%"><el-table-column prop="id" label="#"></el-table-column><el-table-column prop="brandName" label="品牌名"></el-table-column><el-table-column prop="categoryName" label="分类名"></el-table-column><el-table-column fixed="right" header-align="center" align="center" label="操作"><template slot-scope="scope"><el-buttontype="text" size="small" @click="deleteCateRelationHandle(scope.row.id,scope.row.brandId)">移除</el-button></template></el-table-column></el-table><span slot="footer" class="dialog-footer"><el-button @click="cateRelationDialogVisible = false">取 消</el-button><el-button type="primary" @click="cateRelationDialogVisible = false"> 确 定</el-button></span></el-dialog>
2.数据池中定义信息
      cateRelationDialogVisible: false, // 品牌和分类关联的对话框cateRelationTableData: [], // 品牌和分类关联的表格数据cascadedCategoryId: [], // 级联选择器的值,从 categories 中取popCatelogSelectVisible: false, // 是否显示分类选择器props: { //显示返回的家居分类的哪些字段/信息value: "id", // 级联选择器的值label: "name", // 级联选择器的显示标签children: "childrenCategories" // 级联选择器的子选项},categorys: [], //所有的家居分类brandId: 0, //品牌 id, 默认为 0
3.方法显示对话框

image-20240419093946923

image-20240419094002089

3.显示关联分类的级联菜单
1.添加方法,获取分类列表,带层级
    // 获取分类列表(带层级)getCategories() {this.$http({url: process.env.COMMODITY_BASEPATH + '/commodity/category/list/tree',method: 'get'}).then(({data}) => { // 解构了datathis.categorys = data.data;})}
2.初始化时调用这个方法

image-20240419094516747

3.结果展示

image-20240419094247215

5.添加分类关联

1.前端 brand.vue
1.点击关联分类按钮,将品牌id放到数据池的brandId中

image-20240419095645659

2.编写addBrandCategoryRelation,发送新增关联的请求
    // 新增关联addBrandCategoryRelation() {// 获取品牌 id 和分类 idthis.$http({// 向品牌分类关联表的接口发送请求,要求得到品牌名和分类名url: process.env.COMMODITY_BASEPATH + '/commodity/categorybrandrelation/relation',method: 'post',params: this.$http.adornParams({brandId: this.brandId,categoryId: this.cascadedCategoryId[this.cascadedCategoryId.length - 1]})}).then(({data}) => {if (data && data.code === 0) {this.$message({message: '操作成功',type: 'success',duration: 1500})this.cateRelationDialogVisible = false} else {this.$message.error(data.msg)}})}
2.后端 sunliving-commodity模块
1.service层
1.CategoryBrandRelationService.java 新增方法
    /*** 获取品牌分类关联信息* @param brandId* @param categoryId* @return*/void saveRelationById(Long brandId, Long categoryId);
2.CategoryBrandRelationServiceImpl.java 实现方法

image-20240419110605445

    @Overridepublic void saveRelationById(Long brandId, Long categoryId) {// 根据brandId和categoryId查询品牌名和分类名String brandName = brandDao.selectById(brandId).getName();String categoryName = categoryDao.selectById(categoryId).getName();// 插入到关联表中CategoryBrandRelationEntity categoryBrandRelationEntity = new CategoryBrandRelationEntity();categoryBrandRelationEntity.setBrandName(brandName);categoryBrandRelationEntity.setCategoryId(categoryId);categoryBrandRelationEntity.setCategoryName(categoryName);categoryBrandRelationEntity.setBrandId(brandId);categoryBrandRelationDao.insert(categoryBrandRelationEntity);}
2.controller层
CategoryBrandRelationController.java 编写接口
    /*** 关联*/@RequestMapping("/relation")// @RequiresPermissions("commodity:categorybrandrelation:list")public R relation(@RequestParam Map<String, Object> params){long brandId = Long.parseLong(params.get("brandId").toString());long categoryId = Long.parseLong(params.get("categoryId").toString());categoryBrandRelationService.saveRelationById(brandId, categoryId);return R.ok();}
3.测试

image-20240419110629470

image-20240419110619989

4.两个小问题
1.添加成功之后关闭弹窗

image-20240419110915704

image-20240419110935565

2.下一次点击新增关联时不保存上一次记录

image-20240419111307317

image-20240419111259069

6.显示分类关联列表

1.后端sunliving-commodity模块
1.service层
1.CategoryBrandRelationService.java
    /*** 根据品牌id获取关联的分类* @param brandId* @return*/List<CategoryBrandRelationEntity> getCateRelationTableDataById(Long brandId);
2.CategoryBrandRelationServiceImpl.java
    @Overridepublic List<CategoryBrandRelationEntity> getCateRelationTableDataById(Long brandId) {return categoryBrandRelationDao.selectList(new QueryWrapper<CategoryBrandRelationEntity>().eq("brand_id", brandId));}
2.controller层
    /*** 根据brandId查询关联的分类*/@RequestMapping("/list/{brandId}")// @RequiresPermissions("commodity:categorybrandrelation:list")public R getCateRelationTableDataById(@PathVariable("brandId") Long brandId){// 根据brandId查询关联的分类return R.ok().put("data", categoryBrandRelationService.getCateRelationTableDataById(brandId));}
3.测试

image-20240419113554394

2.前端 brand.vue
1.找到列表绑定的属性

image-20240419113756264

2.找到点击关联按钮触发的方法,为属性赋值
    // 关联分类relateCategoryHandle(id) {// 显示分类信息this.$http({url: process.env.COMMODITY_BASEPATH + '/commodity/categorybrandrelation/list/' + id,method: 'get'}).then(({data}) => {if (data && data.code === 0) {this.cateRelationTableData = data.data} else {this.cateRelationTableData = []}})// 点击关联分类按钮,得到品牌 id,并放到 brandId 中this.brandId = idthis.cateRelationDialogVisible = true}
3.查看结果

image-20240419114728799

3.几个小问题
1.在新增关联之后并没有刷新分类列表
1.只需在addBrandCategoryRelation这个新增关联的方法操作成功后刷新表格即可

image-20240419115339506

2.展示

image-20240419115608631

2.已经有关联了,但是还会重复插入的问题
1.修改后端CategoryBrandRelationServiceImpl.java的saveRelationById方法,先检测是否表中已经有关联信息了
        // 查询一下是否已经存在关联关系,如果有就不插入List<CategoryBrandRelationEntity> categoryBrandRelationEntities = categoryBrandRelationDao.selectList(new QueryWrapper<CategoryBrandRelationEntity>().eq("brand_id", brandId).eq("category_id", categoryId));if (categoryBrandRelationEntities.size() > 0) {return;}

image-20240419120159719

2.重启测试

image-20240419120235271

image-20240419120248294

7.删除分类关联列表

1.后端sunliving-commodity模块
1.CategoryBrandRelationController.java 已经提供了根据id删除的接口

image-20240419134427521

2.前端brand.vue
1.发现移除按钮,使用的是插槽机制,可以直接获取当前行的id和brandId

image-20240419134558267

2.编写deleteCateRelationHandle方法
    // 根据id删除品牌和分类的关联deleteCateRelationHandle(id, brandId) {this.$http({url: process.env.COMMODITY_BASEPATH + '/commodity/categorybrandrelation/delete',method: 'post',// 数组的形式传入id参数data: this.$http.adornData([id], false)}).then(({data}) => {if (data && data.code === 0) {this.$message({message: '操作成功',type: 'success',duration: 1500})this.relateCategoryHandle(brandId)} else {this.$message.error(data.msg)}})}
3.测试

image-20240419134857206

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

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

相关文章

JavaWeb基础(HTML,CSS,JS)

这些知识用了三四天左右学完&#xff0c;因为是JavaWeb&#xff0c;并不是前端&#xff0c;所以只是够用&#xff0c;不是深入&#xff0c;但是这确实是学校一个学期交的东西&#xff08;JavaWeb课程&#xff09;。 总结一下网页分为三部分&#xff1a;HTML(内容结构),CSS&…

MySql--SQL语言

目录 SQl---DDL 结构定义 创建、删除 数据库 代码 运行 设计表 数据类型 整数 浮点数 主键 约束 主键自增长 默认值 字段注释 创建、删除 表 代码 运行 代码 代码 运行 SQL---DML 数据操纵 插入数据 代码 运行 代码 运行 代码 运行 代码 …

【实战教程】使用Spring AOP和自定义注解监控接口调用

一、背景 随着项目的长期运行和迭代&#xff0c;积累的功能日益繁多&#xff0c;但并非所有功能都能得到用户的频繁使用或实际上根本无人问津。 为了提高系统性能和代码质量&#xff0c;我们往往需要对那些不常用的功能进行下线处理。 那么&#xff0c;该下线哪些功能呢&…

docker部署kafka实战

目录 一、部署kafaka、zookeeper 二、测试信息发送与接收 三、kafka进阶 一、部署kafaka、zookeeper 请提前安装docker、docker-compose 安装docker&#xff1a;docker--安装docker-ce-CSDN博客 安装docker-compose&#xff1a; 安装docker-compose_安装 docker-compose-CSD…

云下到云上,丽迅物流如何实现数据库降本50% | OceanBase案例

在2024年3月20日的首场OceanBase数据库城市行活动中&#xff0c;专注于物流及供应链解决方案的丽迅物流的架构师阳磊&#xff0c;围绕“OB Cloud在丽迅物流的实践”这一主题&#xff0c;进行了精彩的演讲。本文为此次演讲的内容回顾。 在丽迅物流&#xff08;Lesoon Logistics…

9.1 Go语言入门(环境篇)

Go语言入门&#xff08;环境篇&#xff09; 目录一、什么是Go语言二、下载安装配置Go语言开发环境1. 下载2. 安装3. 配置环境变量4. 安装环境验证 三、 开发工具1. 下载2. 安装3. 激活4. 配置SDK 四、 创建go工程文件并运行1. 创建go工程2. 示例代码3. 运行代码 目录 一、什么…

软件开源协议与QT的开源协议介绍

一.常见的六种开源协议 1.BSD协议 BSD协议全称为“Berkely Software Distribution”&#xff0c;中文译为“伯克利软件发行版”。其最早用于伯克利UNIX操作系统上的开源贡献。 主要特点&#xff1a; 允许修改源码 允许源码再发布 允许商业软件发布和销售 约束&#xff1…

shell 脚本笔记2

3.env与set区别 env用于查看系统环境变量 set用于查看系统环境变量自定义变量函数 4.常用环境变量 变量名称含义PATH命令搜索的目录路径, 与windows的环境变量PATH功能一样LANG查询系统的字符集HISTFILE查询当前用户执行命令的历史列表 Shell变量&#xff1a;自定义变量 目标…

HCIP【VRRP、MSTP、VLAN综合实验】

目录 一、实验拓扑图&#xff1a; ​编辑二、实验要求 三、实验思路 四、实验步骤 &#xff08;1&#xff09; eth-trunk技术配置 &#xff08;2&#xff09;vlan 技术配置 &#xff08;3&#xff09;配置SW1、SW2、AR1、ISP的IP地址 &#xff08;4&#xff09;在交换机…

FBB-Frontiers in Bioengineering and Biotechnology

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Frontiers in Bioengineering and Biotechnology是专注生物工程和生物技术领域的开放获取期刊。 研究范围涵盖生物材料、生物力学、生物工艺工程、生物安全和生物安保&#xff0c;生物传…

QT项目-欢乐斗地主游戏

QT项目-欢乐斗地主游戏 游戏概述游戏规则牌型牌型的大小游戏角色游戏规则游戏的胜负游戏计分规则 游戏相关的类介绍卡牌类玩家类窗口类游戏控制类游戏策略类线程类音频类 游戏主要组件卡牌玩家窗口 游戏控制源码 游戏概述 游戏规则 不同地域游戏规则可能有些许差异&#xff0c…

MySQL之Schema与数据类型优化(三)

Schema与数据类型优化 BLOB和TEXT类型 BLOB和TEXT都是为存储很大的数据而设计的字符串数据类型&#xff0c;分别采用二进制和字符方式存储。 实际上它们分别属于两组不同的数据类型家族:字符类型是TINYTEXT&#xff0c;SMALLTEXT,TEXT&#xff0c;MEDIUMTEXT&#xff0c;LONG…

Spring Cloud整合Sentinel

1、引入依赖 链接: 点击查看依赖关系 父pom <spring.cloud.version>Hoxton.SR12</spring.cloud.version> <spring.cloud.alibaba.version>2.2.10-RC1</spring.cloud.alibaba.version>Sentinel应用直接引用starter <dependency><groupId&…

【UE5.1】* 动画重定向 (让你的角色可以使用小白人全部动画)

前言 这里以小白人动画重定向给商城资产“Adventure Character”中的角色为例&#xff0c;阐述如何使用UE5.1进行动画重定向。 步骤 1. 创建一个IK绑定 这里选择小白人的骨骼网格体 这里命名为“IKRig_Mannequin” 2. 再新建一个IK绑定&#xff0c;这里使用你要替换给的角色…

MyBatis入门——MyBatis XML配置文件(3)

目录 一、配置连接字符串和MyBatis 二、写持久层代码 1、添加 mapper 接口 2、添加 USerInfoXmlMapper.xml 3、测试类代码 三、增删改查操作 1、增&#xff08;Insert&#xff09; 返回自增 id 2、删&#xff08;Delete&#xff09; 3、改&#xff08;update&#xf…

软考--试题六--中介者模式(Mediator)

中介者模式(Meditor) 意图 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互 结构 适用性 1、一组对象以定义良好但是复杂的方式进行通信&#xff0c;产生的相互依赖关…

民国漫画杂志《时代漫画》第17期.PDF

时代漫画17.PDF: https://url03.ctfile.com/f/1779803-1248612629-85326d?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络&#xff01;

力扣HOT100 - 1143. 最长公共子序列

解题思路&#xff1a; 动态规划 class Solution {public int longestCommonSubsequence(String text1, String text2) {int m text1.length(), n text2.length();int[][] dp new int[m 1][n 1];for (int i 1; i < m; i) {char c1 text1.charAt(i - 1);for (int j 1…

深度学习之基于YoloV5的动物识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与目标 在生态研究、动物保护、以及畜牧业等多个领域&#xff0c;对动物进行准确、高效的识别都具有重…

形态学操作:腐蚀、膨胀、开闭运算、顶帽底帽变换、形态学梯度区别与联系

一、总述相关概念 二、相关问题 1.形态学操作中的腐蚀和膨胀对图像有哪些影响&#xff1f; 形态学操作中的腐蚀和膨胀是两种常见的图像处理技术&#xff0c;它们通过对图像进行局部区域的像素值替换来实现对图像形状的修改。 腐蚀操作通常用于去除图像中的噪声和细小的细节&a…