首先说一下一个数据库的知识,如果我们要实现删除或者设置为是否上架的话,其实在数据库里面都是一种相当于更新的操作,为什么这么说呢?因为在数据库里面,你删除它,它只是把下图中圈出来的地方的数值变为0而已。


还有一点需要注意,在下面的图片中,上面的地址跟下面的地址是不一样的,上面的地址通常是在前端中找到对应的路由,下面的地址通常是被后端截取,下面的地址是由前端编写,作为一个跟后端连接的方式,前端会写好一个基础路径,还有前缀,包括一个微服务地址,然后后端进行截取


我们这边要注意一下这个逻辑,我们新增商品是有四个信息要填,而且在下面所属品牌那里,我们要编写好对应的业务逻辑,为什么品牌那里也要编写,因为品牌很多,假如我们选好了分类,然后点击品牌,弹出几百个,几千个品牌,那我们要找的时间就很长,但是如果我们选择的商品分类之后,再点击品牌,让品牌根据商品分类来显示出对应的几种品牌,这样用户能够迅速找到自己的品牌,而不用耗费精力去在所有品牌中去找,所以我们也是需要完成这个业务逻辑。


所以要去当前路径下找到item包里的Goods

然后看到新增商品。

因为新增商品是点击后才出现表格,所以我们直接看点击方法就可以,在当前页面下找到点击的这个方法,

像这样的方法肯定在methods下面去找

找到了我们这个形成商品的方法,第一个就是修改标记,默认值为false,因为我们没去修改它,所以默认是没有操作的,这里要说明一下,这个方法是我们点击的新增商品后执行的方法,因为我们还没有进行操作,所以修改标记才是false,但是弹窗已经弹出来了,所以值为true,因为我们这里是新增,所以不能有旧的商品信息,所以oldGood是一个空集合,给它一个空值。

我们可以找找默认状态下的show方法,这个状态下是默认状态下,也就是没有点击新增商品的状态下,所以我们弹出对话框显示是fasle

然后我们再来看看show的数据模型是怎么样的,什么是数据模型呢?也就是说,定义show的长度宽度之类的信息,这些就是show的数据模型,我们从下图可以看出show下面包含了哪些参数。

可以看到我们这里有个选项,也就是说true的话就是修改,false的话就是新增,但是我们之前赋值过了是false,所以是一个新增。为什么它要写成这样呢?不直接写个新增在这里呢?因为其他表格也是有这个,而且有些表格是修改,有些是新增,所以写成这样方便其他表进行调用。

下图中这个是对话框里面的内容,其中有个goods-form,我们如果不知道这个是什么功能的,可以去找到这个goods-form,看看它里面有什么内容。


可以看到它是一个自定义组件,他来自当前路径下的GoodsForm


可以看到他这里是个进度条,如果想看这个进度条,可以在上面的图片当中找。他这里包含了四个步骤,都是进度条的四个步骤。

可以看到他的数据模型来自于这里。

可以看到它对应的是这里。

下面的模型是从哪里来的呢?

这上面代表的是商品信息的意思,然后他们四个的模型就在这里。


可以看到他品牌的数据模型是对应的这个。


它的品牌id信息对应的是0,但是为什么它对应的是0呢?品牌id的信息如果为零的话,那该如何显示品牌?


我们这里是个选择框啊,这个品牌id不是对应多个值吗?

事实上这个是你选择了品牌id之后,他才会有值,也就是说,你没有选任何品牌id,他是不会给值的,他如果给值的话就会显示品牌,所以在这里我们也做了一个选项,就是品牌的选择选项,如果你选择了一个品牌,就会出现对应的品牌id,然后就会显示对应的品牌。

品牌选项是一个空的品牌列表,为什么他是一个空的列表呢?因为接下来我们要根据你选择的商品分类才能定下来,你这个品牌列表是什么?所以品牌列表一开始是空的,但是如果你选择的商品分类之后,就会向里面传入数据,让品牌列表有数值,品牌列表才会显示对应的选择。

那么这个商品分类是怎么发送请求给品牌列表的呢?我们可以看到我们点击新增商品这个按钮后,会弹出这样的一个框,但是没有任何请求路径的发生,可以看到下面红框圈住的地方没有任何地址。


但是在我们选择了商品分类之后,他就会发起地址,其中一条就是品牌分类的地址。这就说明了商品分类这个值是被监听的,一旦商品分类的值发生变化,那它就发送请求,到品牌分类这里,让品牌分类去改变。这就是监听的作用,能够监视你这个值的变化,然后再让另一个值做出改变。以后如果有这样的情况,就是说一个值改变后,另一个值也跟着改变,那很大几率是使用的是监听。



在监听方法里面的商品分类。


来一个深度监听,只要商品分类的值发生变化,那么就会触发查询品牌,品牌id也会跟着改变。

然后我们就开始编写我们的后台业务逻辑,具体GetMapping怎么获取的,这里不多说了,就是看看浏览器的请求路径就行了

这个品牌地址是怎么出来的呢?因为我们点击的商品分类,商品分类就会发送一个地址到所属品牌那里,为什么我们会知道这个地址是发送到所属品牌那里,你可以去看看前端页面是怎么写的,他是你点击了商品分类之后,他就会发送一个地址/item/brand/cid,而这个地址刚好就是品牌分类的地址,所以我们只要去截取他就行了,具体后面那个数字,我们要用占位符去代表他。

Service我们应该这么写,然后要把cid参数传给Brand实体类,


但是我们发现并没有cid在Brand里面,这个时候我们很容易去想到继承类,但是在这里继承类有用吗?我们可以去看看数据库,数据库当中并没有cid,但是我们这个cid代表什么意思呢?

品牌表当中并没有cid

中间表才有cid,但是我们又不能直接在数据库里面声明要找属性名cid,因为这里也没有,cid代表的是什么,就是category_id,我们需要写一个自定义操作数据库的方法,也就是在Mapper里面实现自己编写数据库语言和自己进行操作。

所以我们的Service直接这么写了,为什么把 new Brand去掉,因为它没有封装这个属性,加了也是没用,所以我们直接返回查询结果就行了,我们的思路是这样的,因为我们的目的是通过商品分类去拿到对应品牌的信息,所以在用户选择好商品分类后,我们就已经拿到了对应品牌的参数,把这个参数cid传进去数据库里面进行匹配(这里要搞清楚两个概念,category是商品的意思,brand是品牌的意思,也就是说cid是商品分类的参数,我们需要用cid通过中间表去匹配对应的品牌,然后再在brand数据表里面拿到这个品牌信息,为什么最终的Brand是个List呢?因为一个cid是第三级类目的商品分类id,比如手机,肯定对应多个品牌,不然你可以看看上面的数据库,一个76都对应这么多品牌了),匹配后的结果将会在Brand数据表中拿到所有品牌信息并且进行返回。

我们可以看看Mapper方法,我们这里用到Select查询方法,具体该怎么写呢?

INNER JOIN 和LEFT ,RIGHT,有什么区别呢?INNER代表两个表之间的关联,LEFT就是以左边表为准,如果左边有右边没有,那就显示左边的数据,RIGHT是同理。

最终复制过来,问题不大

执行结果,查询成功。

完成新增商品功能当中的一个功能(如何在用户选择商品分类的时候,根据商品分类id去在数据库里面匹配对应的品牌信息,并且返回到浏览器给用户进行选择品牌)相关推荐

  1. python有什么隐藏功能_Python的隐藏功能

    文章目录 Python编程语言的鲜为人知的但有用的功能是什么? 尝试限制Python核心的答案. 每个答案的一个功能 给出一个功能的例子和简短描述,而不仅仅是文档的链接. 使用标题作为第一行标记该功能 ...

  2. 编写一个C程序,实现以下功能:定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序。在主函数中

    编写一个C程序,实现以下功能: 定义一个学生结构体Student(含学号.姓名.年龄.身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序.在主函数中 ...

  3. Android 中编写一个简易购物车,商品包括商品名称,单价,数量,可以对商品进行增删改查功能。(ArrayList,SQLite)

    Android 中编写一个简易购物车,商品包括商品名称,单价,数量,可以对商品进行增删改查功能.(ArrayList,SQLite) 布局(activity_main.xml): <?xml v ...

  4. 如果删掉微信中一个功能,你的选择是什么

    题外话 话题:知识付费和共享单车:还有那种让人抓狂的题,如"假如人们将以闲聊代替吃饭获取能量,那将会产生什么需求?" 问题 "如果你是微信的产品经理,需要删一功能,请问你 ...

  5. Hackathon 实用指南丨快速给 TiDB 新增一个功能

    TiDB Hackathon 2022 火热报名中!你报名了吗(还没报名看这里)?你有 idea 了吗(没有 idea 看这里)? 有了 idea,但是不够了解 TiDB,不知道如何动手实践?本文将通 ...

  6. ChatGPT商业网站源码/支持GPT4.0/ai绘画(MJ绘画模型)/用户会员套餐+支持个人收款/赚取收益/实时语音识别输入/文章资讯发布功能/邀请分佣功能/后台一键版本更新!

    前言 程序已支持ChatGPT4.0.Midjourney绘画.GPT3.5 绘画.语音识别输入.文章资讯发布功能.用户每日签到功能+一键更新版本.支持手机电脑不同布局页面自适应. 1.提问:程序已经 ...

  7. android n对讲功能,Android N 十大新功能汇总,最后一个功能亮了

    随着Android N发布日期的日益临近,新系统越来越多的细节逐渐呈现在了我们眼前. 想知道Android N有哪些强大的新功能吗?一起来看看吧! 一.分屏多任务 进入后台多任务管理页面,然后按住其中 ...

  8. android post请求添加公共参数_XHttp2 一个功能强悍的网络请求库

    XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKHttp组合进行封装.还不赶紧点击使用说明文档,体验一下吧! 项目地址 关于我 https://github ...

  9. Android-如何开发一个功能强大的图片选择器

    图片选择器是Android开发中会经常用到的一个功能,特别对于社交类的应用,比如头像设置,比如发图片.自然ImagePicker的轮子很多,今天介绍一个功能强大的轮子SImagePicker 介绍 首 ...

最新文章

  1. P1155 双栈排序(二分图染色)
  2. php自动断词,PHP自动分页、防止英文单词被截段、去除HTML代码
  3. 77.数据库里怎么预防死锁?-80.视图索引
  4. 智邦国际怎么样?企业管理软件好不好?
  5. C#实现清理系统内存
  6. java子类和父类实例_java中父类与子类之间的转换示例
  7. php员工删除,php+mysql删除指定编号员工信息的方法_PHP
  8. CSS中min-height:100%问题
  9. Zemax操作24--高斯光束的聚焦和传播
  10. Java学习笔记第七天:极其基础的家庭记账系统
  11. 计算机网络顺口溜,一到十的顺口溜祝福语
  12. 苹果手机拨号键盘中隐藏这3个秘密,单纯用来打电话,真的太可惜
  13. rust自创服务器_用Rust写了一个简单的Web服务器
  14. java.net.UnknownHostException: master (HBase报错)
  15. 12 More Effective C++—条款16/17 (2/8原理与延缓求值)
  16. 万维网、因特网、互联网区别
  17. 读书笔记 - I heart logs
  18. Beef的安装及基本使用
  19. 基于EasyNVR二次开发实现自己的摄像机IPC/NVR无插件化直播解决方案
  20. POJ2763Housewife Wind

热门文章

  1. TF-IDF和BM25算法原理及python实现
  2. 程序员也要懂点法律--专栏《白话法律42讲》学习总结
  3. Permission denied: win7下面eclipse上传本地文件到DFS 运行M/R程序时出现的同样的错误解决方法
  4. Android清空Fragment缓存,如何在Android中清除Fragment Backstack
  5. 监理教程知识点精讲之行业信息化的主要模式
  6. 什么是Firebug
  7. 聊聊软件登录界面的设计与交互
  8. USBasp制作资料及全过程(菜鸟版)
  9. 超实用BRVAH开源框架使用之添加头部尾部问题
  10. 【Python】ValueError: The number of classes has to be greater than one; got 1 class