今天是刘小爱自学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后沪漂,不为其它,只为学会自律做好自己,也愿我的每日打卡能给你带来勇气,欢迎点赞关注和评论。

使用通用mapper实现条件查询_【微服务】152:Stream流和通用mapper批量查询的使用...相关推荐

  1. 微服务跨数据库联合查询_微服务架构下,解决数据库跨库查询的一些思路

    加关注,不迷路! 前言 在服务做微服务改造后,原先单库join查询已经不能满足要求,每个拆分的微服务对应一个数据库实例,而且部署在不同的服务器上,那么解决"跨库查询"就势在必行了. ...

  2. kibana管理界面日志级别查询_微服务海量日志怎么处理,我不允许你还不知道这款工具...

    背景 在企业级的微服务环境中,跑着成百上千个服务都算是比较小的规模了.在生产环境上,日志扮演着很重要的角色,排查异常需要日志,性能优化需要日志,业务排查需要业务等等.然而在生产上跑着成百上千个服务,每 ...

  3. 微服务跨数据库联合查询_微服务架构中如何解决连表查询的问题?

    谢邀. 首先我说一个很实际的问题,不是任何公司都需要微服务,或者说,不要上来就搞微服务,我看过北京不少创业公司的项目,这么说吧,估值在2亿美金以下的创业公司,基本上没必要搞什么微服务,总共就二十几口程 ...

  4. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

  5. 微服务架构下,解决数据库跨库查询的一些思路

    开局先总结一下:现在很多厂都进行了微服务的开发模式,但是呢,业务的拆分的时候如果存在交叉是一件非常头大的事情,所以大家写微服务尽量不要交叉的写,比如新增用户如果已经存在在userservice里面了那 ...

  6. 微服务架构下静态数据通用缓存机制

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 |  my.oschina.net/u/3971241/bl ...

  7. 微服务可靠性测试_微服务可靠性设计

    1.背景 微服务化之后,系统分布式部署,传统单个流程的本地API调用被拆分成多个微服务之间的跨网络调用,由于引入了网络通信.序列化和反序列化等操作,系统发生故障的概率提高了很多.微服务故障,有些是由于 ...

  8. python 微服务 网关_微服务中的 API 网关(API Gateway)

    我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api ...

  9. spring cloud gateway 网关_微服务网关Spring Cloud Gateway全搞定

    一.微服务网关Spring Cloud Gateway 1.1 导引 文中内容包含:微服务网关限流10万QPS.跨域.过滤器.令牌桶算法. 在构建微服务系统中,必不可少的技术就是网关了,从早期的Zuu ...

  10. (二)微服务保护——限流规则

    微服务保护--限流规则 一.快速入门: 1.簇点链路: 二.流控模式: (一)三种模式: (二)关联模式: 1.例子: 2. 使用场景: 3.案例: (三)链路模式: 1.例子: 2.案例 三.流控效 ...

最新文章

  1. 太酷了,Python 制作足球可视化图表 | 代码干货
  2. AI如何在安防行业更加深入?可从超高清视频监控切入
  3. Sahi (2) —— https/SSL配置(102 Tutorial)
  4. iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge
  5. 阿里云实现人脸登录(人脸库 OSS)
  6. 【第三方互联】15、百度(baidu)授权第三方登录
  7. SQL语句中case、when、then的使用
  8. MEMS mic之PDM mic(二)
  9. HTML5学习系列之表单与文件
  10. layer常用功能-子页面关闭当前窗口-执行子页面方法-方法回调
  11. 北邮php,周琳娜-北京邮电大学网络空间安全学院
  12. android qq隐藏功能,90﹪的人都不知道--手机QQ这些隐藏的功能!
  13. MATLAB强化学习-appdesigner使用
  14. 数字图像处理例题整理
  15. 工作流(1):表格设计
  16. C++引用实现函数传递数据
  17. 第二章 UT单元测试——GTest框架实例
  18. 学习记录01:使用pyqt5搭建yolo3目标识别界面
  19. CMD命令 (复制、移动、重命名) (文件夹、子文件夹)下所有符合条件的文件
  20. A Survey of Rate Adaptation Techniques for Dynamic Adaptive Streaming Over HTTP(自适应流媒体的综述)

热门文章

  1. html间隔代码_HTML+CSS基础入门开发,经典Loading加载缩放动画特效
  2. stackexchange.mysql_.net core使用redis基于StackExchange.Redis
  3. android相册幻灯片功能,Android实现幻灯片式图片浏览器
  4. docker php 一键部署_Java开发提升十倍生产力:Idea远程一键部署springboot到Docker
  5. java 替换多个字符串_Java一次(或以最有效的方式)替换字符串中的多个不同子字符串...
  6. java 解析 csv_在Java中将数据从CSV解析到数组
  7. java生成flash_针对 Flash 开发者的最新 Capuchin 计划资源
  8. 带虚函数的类的sizeof分析
  9. matlab画图显示中文
  10. Android之圆角矩形