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

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

感谢你的观看,谢谢你。

e5c1214fdf264387b5796f89f867e090.png

学习计划安排如下:

  • 补充完昨天商品查询中关于分类和品牌的部分,其中牵扯到了两个非常重要的知识点:
  • Stream流的使用,这个学过后基本就没怎么使用过,这次做一个回顾。
  • 通用Mapper根据多个id批量查询,以前在写其使用教程的时候都不知道还有这种用法。

一、业务需求分析

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

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

有两种解决方法:

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

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

5a61ba7b302b2aa66108f53e220a37d3.png

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

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

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

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

二、Java代码编写

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

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

1Category业务代码补充

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

36b2fe94ac2e1a5a3db1bcf79d90e92c.png

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

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

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

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

2Brand业务代码说明

998b16a5ab247d8ac56016b08cf32373.png

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

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

3Goods业务代码整合

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

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

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

5a8a5b660ee446fddbd8fd480daa6bc0.png

①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("/")是表示将收集到的数据以“/”完成拼接。

三、测试

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

9c0cdafed4cc1a555f7024767f2c9c8b.png

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

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

最后

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java递归实现多级菜单栏_vue+ java 实现多级菜单递归效果

效果如图:大概思路:树形视图使用的是vue官方事例代码,java负责封装数据,按照vue官方事例的数据结构封装数据即可。有两个需要关注的点:1.官方事例的数据结构是一个对象里面包含着集合,而不是一个集合对象 2…

mfc打开一个.txt文件并进行处理_文件处理方法Python

你好,我是goldsunC让我们一起进步吧!1. 文件说明文件是存储在存储器上的数据序列,在计算机中,所有文件都是以二进制的方式进行存储的,而文件的展示形式一般分为两种:文本形式和二进制形式。文本文件由单一特…

qt的如何调整显示不为科学记数法_Excel操作技巧:如何将信息快速准确的录入Excel?...

前面几篇文章中,给大家介绍了一些excel的基本操作技巧,以及如何高效地浏览表格。相信大家多少都会获得一点收获,希望能够为大家提供一些工作上的帮助。工作中,老板经常会安排我们手动输入一些数据,考虑到我们要不停的手…

如何给mysql表添加百万条数据_给mysql一百万条数据的表添加索引

直接alter table add index 添加索引,执行一个小时没反应,并且会导致锁表;故放弃该办法,最终解决办法如下:一.打开mysql 命令行客户端这里我们那可以看到导出的数据文件所存放的默认位置 C:\ProgramData\MySQL\MySQL …

qchart画完以后删除_冬天的夜晚很难画?老师分步骤教你画,简单易学,收藏起来临摹...

今日绘画主题:冬天的夜晚冬天是美好的,也是很多画家喜欢创作的题材之一,但是,冬天的夜晚却是很难画,今天分步骤图解教大家画冬天的夜晚,快收藏起来临摹吧。>>>【第一步】:先来画线稿&a…

lrtemplate如何导入pr_PR模板使用套路讲解 视频剪辑教程

​pr模板在使用的时候需要注意的事项以及如何正确操作https://www.zhihu.com/video/1237765482302226432pr模板在使用的时候需要【注意的事项】1、下载的模板必须解压后使用2、下载模板的时候网站上页面都会有介绍模版所支持的版本3、弹出不同版本的提示窗口,点击确…

linux没有usr目录_了解linux系统目录,sys,tmp,usr,var!

linux小白到大神的成长之路:了解linux系统目录,sys,tmp,usr,var!本经验由宗龙龙原创,全文共600多字,阅读需要14分钟,如果文中存在错误,还请大家多多指点,我会积极改进的!​这篇文章将…

svd奇异值分解_奇异值分解SVD

点击上方蓝字关注我们奇异值分解(SVD)在计算机视觉中有着广泛的应用,如数据降维、推荐系统、自然语言处理等。本文是介绍SVD的数学计算过程,并从SVD的性质说明其应用的原理。01特征值与特征向量奇异值分解(SVD)与特征分解类似,是将矩阵分解为…

python turtle画房子详细解释_[宜配屋]听图阁

我就废话不多说了,直接上代码吧!import turtletturtle.Turtle()turtle.Turtle().screen.delay(0)tleftturtle.Turtle()#第一部分t.penup()t.goto(0,0)t.pendown()t.left(20)t.forward(110)t.left(25)t.forward(40)t.left(100)t.circle(180,20)t.right(12…

简易航空订票系统_四川航空APP全新升级改版,三大亮点提升订票体验

成都2015年10月23日电 /美通社/ -- 四川航空发布手机APP全新的3.0版本,不仅针对界面风格做了全新改变,在iOS9、安卓系统上的展示更加炫丽;而且在机票预订、航班动态、特价机票方面均做了大幅升级,会员服务也更加贴心。对于有机票需…

python可视化分析网易云音乐评论_网易云音乐热门评论api分析

网上有现成的例子我就扒过来了!!title: 网易云评论api分析date: 2018-12-24 20:54:46tags: [python]网易云音乐是个好地方,里面各个都是人才,特别是评论区……所以我就想把评论爬下来看看,下面记录一下分析api的过程与…

spring 上下文_一次性教你彻底理解 Spring容器和应用上下文!

作者:陈本布衣www.cnblogs.com/chenbenbuyi有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助…

oracle plsql 到处dbf_plsql 导出oracle数据库

plsql 导出数据库有两个问题,一个是只导出结构,一个是导出表结构加数据这样的,首先人家让我导成sql语句这不是简单,首先打开PLSQL一、导出结构1、然后tools->Export User Objects..然后出来一片空白2、要选择哪个User3、上面会…

python爬取百度百科搜索结果_用Python抓取百度搜索结果,python,爬取,的

前言前几天爬的今天整理了一下发现就两个需要注意的点一是记得用带cookie的方式去访问,也就是实例化requests.session()二是转化一下爬取到的url,访问爬到的url得到返回的Location值,该值便是真实的地址(如果你不是要爬url当我没说)知道了这两…

spring aop设计模式_Spring框架中设计模式的运用

设计模式大家可能随口就能说出总共有23种,但是具体怎么用,或者在常用的组建中有哪些体现,这时候不一定说的上来了。接下来几篇文章,我们一起深入理解。首先我们一起了解下常用的组建中是怎么运用的,比如 JDK、Sring、M…

sql unicode转中文_SELECT语句《SQL必知必会》

数据库中有哪些数据类型?数据库中最常用对数据类型有三种:Text(文本)、Number(数字)和 Date/Time。文本类型:即字符串,如“nameasdas”数字类型:十进制数字,如…

graphpad如何检测方差齐_如何选择方差分析的多重比较方法?资料集锦

欢迎订阅SPSS训练营号方差分析时,如果因素主效应有显著影响,则需要对因素水平进行两两比较,以确认因素水平间的具体差异。这个过程也叫作多重比较。SPSS提供14种用于方差齐次的多重比较方法,还有4种方差不齐情况下的多重比较方法&…

【MySQL学习笔记009】事务

一、事务简介 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 二、事务操作 1、操作1 查看/设置事务提交方式 select a…

c mysql 视图_MySQL入门教程(七)之视图

相关阅读:视图是从一个或多个表中导出来的虚拟表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。1、视图简介1.1 视图的含义视图是从一个或多个表中导出来的虚拟表,还可以从已经存在的视图的基础上定义。数据库中只存放视图的定…

tensorflow gpu安装_tensorflow-gpu安装配置

1 介绍目前,主流版本是tensorflow-gpu 1.12.0,线上安装这个版本,和这个版本搭配的cuda是9.0版本,cudnn版本是7.0.5。2 cuda和cudnn安装cuda驱动地址:cuda_9.0.176_384.81_linux.runcudnn库地址: cudnn-9.0-linux-x64-v…