分类和品牌关联

文章目录

    • 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.rhkb.cn/news/329138.html

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

相关文章

Map遍历、反射、GC

map的遍历 用foreach遍历 HashMap<Character,Integer> map new HashMap<>();map.put(A,2);map.put(B,3);map.put(C,3);for (Map.Entry<Character,Integer> entry: map.entrySet()) {char key entry.getKey();int value entry.getValue();System.out.prin…

HTML | 在IDEA中配置Tomcat时遇到的一些问题的解决办法

目录 IDEA中没有web文件夹目录 Tomcat在哪里配置服务器 IDEA中没有web文件夹目录 首先说在IDEA中没有web这个文件夹的解决办法 在菜单栏中帮助中点击查找操作搜索添加框架支持&#xff08;因为我的IDEA会出现无法点击这个操作&#xff0c;所以我对该操作添加了快捷键&#xf…

防火墙技术基础篇:解析防火墙的网络隔离机制

防火墙技术基础篇&#xff1a;解析防火墙的网络隔离机制 网络安全在现代社会中扮演着重要的角色&#xff0c;保护网络系统、用户和数据免受未经授权的访问、破坏和窃取。个人、企业和国家都需要加强网络安全意识&#xff0c;采取有效措施保护自身的网络安全。随着网络攻击手段…

如何提交网站到谷歌网站收录?

其实就那么几个步骤&#xff0c;要做谷歌那肯定是需要一个谷歌账号的&#xff0c;然后找到Google Search Console这个谷歌的官方平台&#xff0c;这是最权威的可以统计来自谷歌流量的平台了&#xff0c;毕竟是谷歌自家的&#xff0c;肯定也不可能作假&#xff0c;然后就是跟着平…

【详细讲解】二叉树的层序遍历

广度优先搜索 总结一下&#xff0c;思路就是&#xff1a; 加入元素&#xff0c;记录size&#xff0c;size就是当前这一层的元素个数。不断弹出元素&#xff0c;size - 1&#xff0c; 同时加入弹出元素的左右孩子&#xff0c;直到size0&#xff0c;说明当前层已经完全遍历完&am…

【设计模式深度剖析】【A】【创建型】【对比】| 工厂模式重点理解产品族的概念

回 顾&#xff1a;创建型设计模式 1.单例模式&#x1f448;️ 2.工厂方法模式&#x1f448;️ 3.抽象工厂模式&#x1f448;️ 4.建造者模式&#x1f448;️ 5.原型模式&#x1f448;️ &#x1f448;️上一篇:原型模式 | &#x1f449;️下一篇:代理模式 目录…

Vue3中为Ant Design Vue中table的checkbox加tooltip、popover

问题的产生 Vue版本&#xff1a;3.3.13 ant-design-vue 版本&#xff1a;3.x.x 在工作时遇到一个场景&#xff0c;需要在 ant-table 的 checkbox 被禁用的时候提示原因&#xff0c;但是在 ant-design-vue 文档中并没有发现有相关介绍。 首先我去看了issue中是否有提到相关问题…

Oracle Graph 入门 - RDF 知识图谱

Oracle Graph 入门 - RDF 知识图谱 0. 引言1. 查看 RDF Semantic Graph 安装情况2. 创建一个语义网络4. 创建一个模型5. 加载 RDF 文件6. 配置 W3C 标准的 SPARQL 端点 0. 引言 Oracle Graph 的中文资料太少了&#xff0c;只能自己参考英文资料整理一篇吧。 Oracle 数据库包括…

优质道路病害数据集汇总

道路病害指的是因使用、环境影响、材料老化等因素引起的道路表面及结构的各种损伤和退化现象。这些病害可能包括裂缝、坑洞、沉陷、脱层、波浪起伏等多种形态。道路病害不仅影响道路的平整性和美观&#xff0c;更重要的是会影响车辆行驶的安全性和舒适性&#xff0c;增加行车风…

day08-Java常用API

day08——Java常用API 一、今日内容介绍、API概述 各位同学&#xff0c;我们前面已经学习了面向对象编程&#xff0c;使用面向编程这个套路&#xff0c;我们需要自己写类&#xff0c;然后创建对象来解决问题。但是在以后的实际开发中&#xff0c;更多的时候&#xff0c;我们是…

MySql--SQL语言

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

使用xsd验证xml格式的正确性

1.1 基础知识介绍 XML简介&#xff1a;XML是可扩展标记语言&#xff08;eXtensible Markup Language&#xff09;的缩写&#xff0c;它是一种数据表示格式&#xff0c;可以描述非常复杂的数据结构&#xff0c;常用于传输和存储数据。xml文件、xml消息。XSD简介&#xff1a;是X…

【linux】详解vim编辑器

基本指令 【linux】详解linux基本指令-CSDN博客 【linux】详解linux基本指令-CSDN博客 vim的基本概念 vim有很多模式&#xff0c;小编只介绍三种就能让大家玩转vim了&#xff0c; 分别是&#xff1a; 正常/普通/命令模式 插入模式 末行/底行模式 命令模式 控制屏幕光标的…

nssctf(Web刷题)

[SWPUCTF 2021 新生赛]gift_F12 打开题目是一个时间页面&#xff0c;不过看了一会儿发现没有什么用 直接F12打开网页源代码 CtrlF搜索flag 找到了flag NSSCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft} [第五空间 2021]签到题 NSSCTF{welcometo5space} [SWPUCTF 2021 新生赛…

【东山派Vision K510开发板试用笔记】nncase的安装

概述 最近试用了百问网提供的东山派Vision开发板&#xff0c;DongshanPI-Vision开发板是百问网针对AI应用开发设计出来的一个RSIC-V架构的AI开发板&#xff0c;主要用于学习使用嘉楠的K510芯片进行Linux项目开发和嵌入式AI应用开发等用途。DongshanPI-Vision开发板采用嘉楠公司…

RedHat9 | 配置转发DNS服务器

一、实验环境 1、介绍 转发服务器&#xff08;Forwarding Server&#xff09;接收查询请求&#xff0c;但不直接提供DNS解析&#xff0c;而是将所有查询请求发送到另外的DNS服务器&#xff0c;将查询的结果返回后保存到缓存中。如果没有指定转发服务器&#xff0c;DNS服务器会…

LSTM实例解析

大家好&#xff0c;这里是七七&#xff0c;今天带给大家的实例解析。以前也用过几次LSTM模型&#xff0c;但由于原理不是很清楚&#xff0c;因此不能清晰地表达出来&#xff0c;这次用LSTM的时候&#xff0c;去自习研究了原理以及代码&#xff0c;来分享给大家此次经历。 一、简…

GPT‑4o普通账户也可以免费用

网址 https://chatgpt.com/ 试了一下&#xff0c;免费的确实显示GPT‑4o的模型&#xff0c;问了一下可以联网&#xff0c;不知道能不能通过插件出图 有兴趣的可以试试

3.6 enum枚举类型

本节必须掌握的知识点&#xff1a; 示例十一 代码分析 汇编解析 3.6.1 示例十一 enum定义枚举类型&#xff0c;它本质是一种整数类型&#xff08;等同int&#xff09;。所谓枚举就是一一列举的意思。在实际应用中&#xff0c;一个星期有七天&#xff0c;一年有十二个月等。如…

FBB-Frontiers in Bioengineering and Biotechnology

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