如何实现商品规格参数查询代码(通过三级类目的cid查找数据表里全部对应cid的信息并且显示在浏览器)

本文主要是介绍如何实现商品规格参数查询代码(通过三级类目的cid查找数据表里全部对应cid的信息并且显示在浏览器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何实现规格参数查询代码

首先我们要知道一个问题,就是该如何实现显示商品规格参数呢?商品规格参数是一个个数据,因此你避免不了要写这些数据,这些数据是从哪里来的?前端页面也可以写,但如果前端页面没有写,他只是留了一个空位,让我们后端去显示,我们就需要自己去编写。

首先凡是涉及到数据,我们都离不开pojo类,要写这个pojo类,我们是需要先去数据库查看一下对应的信息,首先我们要搞清楚我们编写好的东西在哪里显示?因为我们编写的是三级类目时,右边空白地方要显示的商品规格参数,所以我们要找到对应的数据库表,看看我们要显示哪些信息,我们找到下面的数据库表,发现有三个参数。id,cid和name,这三个参数是什么意思呢?id和name比较好理解,cid就是当前商品的类目,我们这里类目是用这种方式去区分,数字号码不同,类目就不同,数字号码一样,类目就一样。
在这里插入图片描述
由上图可知,我们封装的三个对象。所以下面我们就要开始进行封装,但是我们应该放到哪个模块里面去呢?我们现在的模块有网关模块,上传文件模块,商品模块,注册中心模块。

那不用质疑,就是放在商品模块里面,商品模块有服务模块,还有接口模块,那就是放在接口模块里面。如果你放在上传文件模块的话,这个不太好,因为上传文件模块主要是负责上传文件的,我们这里很难说有没有上传文件。而且这种模块最好放在通用模块里面,因为其他微服务可能也需要。

这是我们写的pojo
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还需要这个实体类。

为什么两个都需要呢?不懂的话可以看看我上一篇博客,我上一篇博客里面有写到,因为我们在前端定义了两种方法,针对两种不同的情况:
第一种是你点击商品类目到父节点的情况,因为商品类目有一级类目,二级类目三级类目,三个类目,其中第一级和第二级为父节点,如果你点击的是父节点,我们前端显示商品的方法就是false,然后就是显示param这类的方法。

第二种是你点击商品类目到子节点的情况,也就是你点击了三级类目,这个时候就会触发前端的机关,显示商品的方法为true,所以就会触发引用Group类方法,所以就会在右边显示商品的列表。

因此就会有这两种实体类。

在这里插入图片描述
我们再看看这个表,来分析一下这个表,首先这个表是来自tb_spec_group这个数据表,其次,他的主键是Id,上面那个Id的注释就代表了这个意思,然后下面那个注解表示的是商品回显,封装了三个方法分别是商品id,商品类别id,还有商品名字,至于最下面那个是一个商品的参数列表,一个List集合,但是这个在我们当前的数据库里面没有显示,所以我们需要加上一个忽视的注解。

我们再来看看另一个方法,特别要注意这个注释,首先其他没什么问题,基本上都是一些基本方法的封装跟注释,那红色框圈出来的注释是什么意思?因为numeric在数据库里面的意思是关键词的意思,如果你不加这个注释,他就默认你是调用数据库里面的关键词,所以需要加上这个来声他只是一个字段,特别要注意的是,双引号里面还有一个’'单引号。
在这里插入图片描述
我们封装完方法当然是要建立一个mapper类啦。你想要调用数据库里面的数据,有四步少不了:封装pojo类,继承Mapper类,编写业务逻辑Service类,最后用controller类进行截取方法和调用Service。

在这里插入图片描述
我们这里注意一下,为什么我们mapper创建了两个类?但是service就创建了一个类,因为这里我们有两个数据库,不能用同一个的mapper去操作这两个数据库,为什么呢?因为两个数据库是对应两个操作方法,这样你在封装方法的时候使用起来比较方便,如果你把两个mapper方法封装在同一个类里面,那调用起来就会比较复杂。但是为什么service方法只有一个?因为我们封装mapper的方法,目的也只是想要调用它来操作数据库,而且这两个数据库是有关联的,所以我们可以写在同一个service方法里面。不仅如此,我们还可以写入同一个controller方法里面。
在这里插入图片描述
接下来我们开始编写controller方法,首先去声明他是个controller的方法,然后我们通常一般做的就是截取他的地址,截取地址需要在浏览器中获得,这个我们先不写,到后来再写。
在这里插入图片描述
我们先去封装这个service方法,到后来发现我们需要截取地址,具体需要截取什么地址呢?因为我们这里有两个数据库需要解决,一个是参数组,另一个是参数表。

我们可以选择先后顺序,可以先去解决参数组。

那么我们就要从浏览器中截取数据,该怎么截取数据呢?我们可以点击最后一个类目,也就是三级类目,然后看看浏览器返回一个什么地址给我们。结果如下第二张图:
在这里插入图片描述
在这里插入图片描述
api和api前面的都是网关前缀跟基础路径,后面的item则是网关里面配置的访问item微服务的地址,最后,spec和groups才是我们要截取的对象。

可以看到他请求方法是GET

所以我们需要GetMapping

在这里插入图片描述
本来我们的路径应该是这样的,但是我们可以把spec放在最外层方法,用RequestMapping装上地址,然后去截取groups/3,但是,这个3是我们刚刚点击浏览器一个组件的时候显示出来的数据,表示当前类目id,其他类目的id不是3,我们不可能直接就截取这个3,因为他会改变,所以我们需要用占位符去表示它,相当于给个位置,以后传入什么参数我们就接受它,然后接收他并且编写业务逻辑。

在这里插入图片描述
写好之后如下所示,凡是我们用来显示商品信息数据的时候,我们肯定要用ResponseEntity,具体泛型是什么,就决定了你返回的东西是什么,那你想想我们要返回的是什么?我们的目的是什么?我们的目的就是在这个浏览器中返回参数组信息,参数组信息是什么,参数组信息就是一个列表,所以我们这里就需要返回一个List列表,并且在把封装的Group传进来,后面那个注解是吧GetMapping中的占位符进行一个截取,并且传入参数
在这里插入图片描述
然后这里我们编写去调用service里面的方法,虽然这个方法我们在service里面还没开始写,但是我们可以先写这个方法,然后再去service里面去编写,这个方法前面的返回值是根据ResponseEntity里面的泛型来决定的,泛型是什么,返回值就是什么。
在这里插入图片描述
无论怎么写,我们在controller里面都少不了这个方法,因为是显示数据库里面的信息,我们要考虑到的是他不能为空,如果为空的话,我们就要执行ResponseEntity里面的404方法
在这里插入图片描述
这可是我们要实现的方法,通俗来讲就是使用cid去查询参数组。这也是我们service里面那个方法需要做到的东西。
在这里插入图片描述
我们在service里面添加这个方法后,有一点需要注意,就是这个返回值,因为我们之前在controller方法里面写了返回值,就是这个,所以Service里面一样要这个返回值,不然在controller里面无法返回给List《SpecGroup》,你想返回给别人,你必须要先跟别人一样嘛
在这里插入图片描述
我们要记住,如果在数据库里面查找数据,也就是你在浏览器输入一个关键词,然后在数据库里面查找数据,肯定用的是Mapper里面的select方法。具体看用哪一个而已,这里不难看出是用第一个,因为有SpecGroup record
在这里插入图片描述
这样的话我们就需要一个参数record,但是这个是什么参数呢?其实这个就是你的数据表里面属性名的参数,因为你想要通过关键词去查找数据库里面的数据,你必须要告诉Mapper你当前的数据表里面有哪些属性名,他才能做好一个分类,哪些关键词对应哪个属性名,分类好之后才能方便他查找,如果不分类好的话,可能会有重复的数据。

那我们该怎么去拿属性名呢?其实我们之前已经封装好方法了,就是我们的pojo类,而且根据上图所示,它也需要我们传入pojo类的对象。

在这里插入图片描述
所以我们先需要new一个对象,因为pojo类方法都是get,set方法,set方法就是传入参数用的,我们把在浏览器中接收到的cid参数传入pojo类,然后调用Mapper方法的select方法并且传入record(record的cid参数已经在上面被改变),Select的作用就是通过关键词去查找对应数据,当然查找到的数据就是数据表的关键词那一行。

然后去运行,结果如下。
在这里插入图片描述
大家不要以为我们上面讲的关键词搜索数据库数据指的是有个输入框给你,然后输入关键词,然后点击搜索就能搜索到数据,不是这样的。我们这里指的是,当你点击到第三级类目,它就会自动向浏览器传入参数cid为3,然后把这个cid传到mapper那里进行再数据库里面搜索cid为3的信息,可以看看下面,假如你的cid为76,他就会把cid为76的全部数据显示在浏览器,cid为3也是同样道理,这就是他工作的方式。

在这里插入图片描述

总结一下就是,首先你要去封装pojo对象,具体封装哪些属性,你可以去前端页面看,也可以去浏览器看,如果还是没有的话,你可以直接去数据库找对应的数据表看。封装完后,你就可以去编写Mapper方法,商品参数组跟商品参数表的Mapper方法要分开,但是,Service可以不用分开,把两个Mapper方法封装在里面。然后注意的是在controller里面用ResponseEntity方法,泛型为返回值,我们要清楚我们做的是什么,我们的目的是通过客户点击类目,记录下类目id,返回给用户一个数据参数组,所以我们直接在controller里面,写Service的查询数据参数组的方法,凡是涉及到这些,Controller里面一定要写的方法就是判断方法,判断是否为空,为空的话就是返回404错误。然后在service里面,调用mapper里面的Select方法,因为查询数据肯定要调用Select方法,然后new一个对应的参数组的pojo类,并且传入浏览器发送过来的cid,set到pojo里面,再返回this的Mapper方法,传入set好的pojo,最终在controller里,返回ok方法并且传入返回值。

这篇关于如何实现商品规格参数查询代码(通过三级类目的cid查找数据表里全部对应cid的信息并且显示在浏览器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/182838

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�