首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【微服务】152:Stream流和通用mapper批量查询的使用

今天是刘小爱自学Java的第152天。

感谢你的观看,谢谢你。

学习计划安排如下:

补充完昨天商品查询中关于分类和品牌的部分,其中牵扯到了两个非常重要的知识点:

Stream流的使用,这个学过后基本就没怎么使用过,这次做一个回顾。

通用Mapper根据多个id批量查询,以前在写其使用教程的时候都不知道还有这种用法。

一、业务需求分析

昨天虽然完成了商品查询,但是其有一个问题,我们查询的数据是SPU,SPU中关于商品分类和品牌只是记录了其Id。

而在前端页面,我们需要显示商品分类和商品品牌对应的具体值。

有两种解决方法:

第一种:响应SPU中关于商品分类和品牌对应的id给前端,再分别根据id发送请求去数据库查询,这种对于前端人员来说就比较麻烦了。

第二种:在查询SPU时就分别查询出对应的商品分类和品牌,再将其数据一并响应给前端。

首先要在前端页面确定需要的字段名,分别为:cname和bname。

其次在SPU实体类中添加这两个属性,当然最正规的做法是重新创建一个实体类,这边为了方便就不这样做了。

使用注解@Transient将这两个属性设为瞬态,意思是从数据库查询时不考虑它们。

最后在查询完毕后通过setCname方法和setBname方法给它们赋值,再响应给前端。

二、Java代码编写

我们从SPU数据表中查询出了商品分类和品牌对应的id,再分别调用:

CategoryService中的代码查询商品分类。

BrandService中的代码查询商品品牌。

1Category业务代码补充

因为有多级商品分类,所以对应多个id。

根据多个id去数据库查询,如果是常规方法,会将这些id遍历,再一一去数据库查询。

但是在通用Mapper中,有selectByIdList()方法可以直接根据id集合完成批量查询。

只需要在Mapper层中继承IdListMapper接口并指定泛型即可。

同样的道理,有批量查询也会有批量新增:继承InsertListMapper接口并指定泛型即可。

2Brand业务代码说明

因为品牌不像商品分类有多级之分,一个商品就一个品牌,所以查询起来很方便。

使用通用mapper中的根据主键查询即可。

3Goods业务代码整合

上述两种查询方式,可以通过前端页面依次发送请求访问服务器实现查询。

但比较麻烦不太合适,所以我们要做的就是将上述两种查询方式整合到Goods业务中。

这样等于是只需要在前端发送一次请求,就对数据库完成了三次查询:

spuList加工处理

spuList是从数据库中查询到的spu集合,这里对它的处理说白了就是:

依次调用spu的setBname方法和setCname方法给spu添加对应的商品分类和品牌。

品牌的添加setBname方法

因为查询到的spu中有品牌对应的id,所以直接调用BrandService中的方法即可查询。

商品分类的添加setCname方法

这个就比较复杂了,依次获取多级分类对应的id,使用Arrays的asList方法将其转换成集合,再调用CategoryService中的方法查询。

查询到的是一个商品分类集合,按照我们常规的方法就是:

遍历商品分类集合,然后逐一获取各个分类,再将这些分类用“/”拼接起来。

这样自然也是可以的,但是使用Stream流更加地方便,Stream流是jdk8的新特性。

我们看上述图中关于Stream流的注释,都有很清楚的说明,依次调用:

steam()方法将其转换成Category的流。

map()方法将其转换成了字符串的流。

什么字符串呢?就是Category中的getName方法。

collect()方法完成流的收集,即流结束了。

其中Collectors.joining("/")是表示将收集到的数据以“/”完成拼接。

三、测试

代码编写完毕,做一个测试:

再次查询商品列表,会发现,商品分类和品牌就都显示出来了。

其中商品分类因为是多级分类,所以用“/”隔开,这就是在Stream流中设置的。

最后

行有不得反求诸己,我是@刘小爱

一个白天上班晚上学习的95后沪漂,不为其它,只为学会自律做好自己,也愿我的每日打卡能给你带来勇气,欢迎点赞关注和评论。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200911A02W7900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券