如何编写查询微服务(通过把写好的微服务放进接口微服务模块,然后再在查询微服务中新建一个接口去继承接口微服务模块)

下面这句话该怎么理解呢?在一个电商网站的项目当中,我们要导入商品Spu信息,难道就不可以一次性全部导入到数据库里面去吗?一次性导入不省事吗?为什么还要进行分批导入到数据库里面去?

这是因为商品量太大了,如果你一次性把全部的商品导入到数据库当中,这将会是很大的数据量,不仅时间长,而且以后查询的时候效率可能会低,但是如果你把商品进行分类,比如日用品一类,电子产品一类,然后也把Spu进行分类,分成商品分类一样的分类,然后进行导入到索引库,这样不就会省时间多了,对吧?

而且以后你在进行查询数据库的时候,因为商品都分类好了,所以你要查询哪个商品只需要到对应的索引库进行找到数据就可以了。

在这里插入图片描述

这里要注意的是,我们保存一个商品的List信息的方法就是,首先建立一个List集合,然后把实体类作为泛型传进去,然后在这个List里面添加商品的名字等等信息,把每个商品信息都传进去list里面,这里要注意的是,list.add后面还需要一个new Item,因为你是传入一个实体类的,你当然也是需要new一个实体类来放信息进去,如果你直接放在list里面的话,list里面也没有东西可以接收这些属性,所以你要去new

在这里插入图片描述
除上面之外,我们不仅需要spu,而且我们还需要sku,每一个spu对应一个sku的list,所以我们需要sku的list,当我们准备好这些sku组成了spu后,我们就需要把每个spu转换为我们的goods。
在这里插入图片描述
可以看到这是我们要完成的接口,有一些我们没写过,比如根据商品的分类显示出更多的分类,比如商品有三个类目,一个是一级类目比如电子产品,那么二级类目就是手机,电视等等,选择其中之一,就会跳转到三级类目,当然如果你一级类目选择日用品,,二级类目就是洗发水或者沐浴露。也就是这样的原理,我们需要设计出一个可以根据商品分类id判断商品分类名称。
在这里插入图片描述
因为这个是商品分类的类目,所以我们需要在category的controller里面写

获取分类参数并且编写业务逻辑
在这里插入图片描述

我们上面那里是接收了三个分类信息的id,然后得出了分类信息,接下来就需要显示品牌了呀,所以看看我们这里品牌应该怎么去获取呢?要获取品牌,就要有它的唯一标识,所以品牌id的唯一标识就是spu的id,因此我们需要通过spu的id获取品牌brand的id
在这里插入图片描述
因此我们要在品牌的controller里面去获取这个方法,这个方法编写的思路是怎么样的呢?首先用GetMapping去接收占位符id,可能有人会问难道你不怕把其他类的id接收过来吗?并不用担心这个,因为我们这个controller上面已经用RequestMapping去接收了Brand参数路径,也就是说,下面的这些GetMapping都是在Brand参数路径的前提下去调用的。

然后我们用ResponseEntity并且传入品牌Brand作为泛型,编写查询方法,用PathVariable来接收id,并且定义id,然后调用Service的一个查询方法并且传入这个id,返回值为Brand,因为只是一条信息,所以只需要Brand作为返回值就可以了,然后最后要注意编写判断,如果查询到的数据为空,那么就需要返回一个404,如果查询到结果了,那就返回一个实体类。

在这里插入图片描述
然后我们在Service里面加上这个方法。
在这里插入图片描述
这里可以先看看商城的页面,看完之后你就知道我们需要什么参数了,首先分类id我们已经编写了,在上面,还有根据spuid去查询品牌id的我们也编写了。下面还有网络样式,尺寸,像素等等,这些就是规格参数,也是我们要进行编写的东西。

在这里插入图片描述

具体规格参数的业务逻辑怎么去编写呢?首先我们要获取cid3

为什么我们要去获取这个cid3呢?其他cid不用获取吗?

首先你要搞清楚这个cid3是什么意思,cid1,cid2,cid3分别代表商品的三个级别的类目,cid3就是最终的类目,也就是你确定下来商品是什么类目了,它就是cid3,我们获取类目直接获取cid3即可,但是我们获取cid3有什么作用呢?

在这里插入图片描述
你可以看到商品规格参数的数据库表,我们需要获取这个searching才能知道哪些规格参数可以被搜索到,哪些不能,searching是个Boolean值,在实际的设定当中,我们是可以决定哪些规格参数能够被搜索,哪些不能。但是我们要去获取到这个searching信息,所以我们需要对应的cid去获取这个具体的规格参数是什么,所以我们只能获取最后的cid3来最终确定商品类别,从而得出它是否能被搜索到,

在这里插入图片描述

所以我们只需要传入这两个参数就可以了,其他的不需要去管它
在这里插入图片描述

那么我们应该如何调用这些微服务呢?之前说过,如果想要去调用这些微服务,就需要一个方法,这个方法就是Feign。Feign是专门从一个微服务调用另一个微服务的方法,那我们应该怎么去使用它呢?

首先一般在企业里面,我们写完一个微服务后,就会在接口微服务类里面去加上它的接口,这个是什么意思呢?

也就是说你如果写完Goods的微服务,大家都需要调用它,你就要把编写好的Goods接口放在interface接口类里面让大家去调用

因为我们之前在item的pom里面已经添加了和service模块的连接,所以我们是可以调用service里面的方法的。
在这里插入图片描述

所以我们要把需要调用的方法写到Goods的api接口类里面

在这里插入图片描述
直接写方法在这个接口模块里面就行,然后其他微服务如果需要调用这个方法,直接配置Feign并且继承这个接口就可以调用了,注意一点,就是接口类和Service之间的联系是在pom里面导入,还有在import里面写上了,所以他们之间可以产生联系。
在这里插入图片描述

接口类一开始这些注解都是报错的,所以我们需要引入依赖
在这里插入图片描述

在这里插入图片描述

最后我们只需要在搜索微服务里面建立一个接口,去继承刚刚的接口类方法,然后打上Feign的注解并且引入item-service这个微服务名,它就会知道我们要去调用哪个微服务,声明完后就可以了,它就会自己进行调用了。
在这里插入图片描述

除此之外,我们还需要根据条件查询spu的分页结果集方法

在这里插入图片描述

把这个方法赋值过来接口类里面来,并且把ResponseEntity去掉,放在接口类的都可以把ResponseEntity去掉,可以看到,我们的分页结果集方法报错了
在这里插入图片描述
因为我们之前的分页结果集方法是写在common里面的,所以我们需要引入common这个模块
在这里插入图片描述
其余方法也是一样的步骤把它写进来接口模块这里面,我们可以把全部的controller方法复制过来放在这下面,然后每个controller方法修改一下,把controller注解去掉,ResponseEntity去掉留下泛型里面的东西,然后具体实现方法也去掉,就可以了

在这里插入图片描述

然后在搜索微服务里面写方法也是一样,写上接口,Feign的注解,继承接口类的方法,这样就完成了编写查询微服务
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值