前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【微服务】152:Stream流和通用mapper批量查询的使用

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

作者头像
刘小爱
发布2020-09-14 14:50:22
6650
发布2020-09-14 14:50:22
举报

学习计划安排如下:

  • 补充完昨天商品查询中关于分类和品牌的部分,其中牵扯到了两个非常重要的知识点:
  • 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后沪漂,不为其它,只为学会自律做好自己,也愿我的每日打卡能给你带来勇气,欢迎点赞关注和评论。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘小爱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、业务需求分析
  • 二、Java代码编写
  • 三、测试
  • 最后
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档