使用通用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,一经查实,立即删除!

相关文章

python tkinter图片为什么要设置全局变量_为什么这里一定要设置全局变量

下面是程序其中有个变量y如果不开始设置成全局变量,yyk;这里就会提示报错说使用了未赋值的局部变量!前提是我再设置其他(inti,z,k,y;)已经设置后不能使用//题目:输入某年某月某...下面是程序其中有个变量y如果不开始设置成全局变量&#xff0…

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

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

python 等值线图_python – matplotlib等值线图:对数刻度的比例色度级

我建议生成一个伪色条如下(见解释说明):import matplotlib.pyplot as pltimport numpy as npfrom matplotlib.colors import LogNormimport matplotlib.gridspec as gridspecdelta 0.025x y np.arange(0, 3.01, delta)X, Y np.meshgrid(x, y)Z1 plt.mlab.bivar…

php链接本地mysql数据库配置文件_php连接 mysql 数据库如何添加一个公共的配置文件...

展开全部php面向对象文件名DB.class.php<?php header("content-type:text/html;charsetutf-8");class DB{public $db_host;//localhostpublic $db_user;//用户名public $db_pwd;//密码public $db_name;//数据库名public $links;//链接名称//构造方法e69da5e887aa…

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

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

navicat mysql 远程_Navicat for mysql 连接远程数据库

错误码1130&#xff1a;更改mysql数据库里的usermysql>use mysql;mysql>select host from user where userroot;mysql>update user set host % where user root;mysql>flush privileges;mysql>select host from user where userroot;错误码2003&#xff1a;1.m…

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

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

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

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

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

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

mysql scws_apache+mysql+php+scws+myft_scws编译安装全程记录

1.首先编译安装apache&#xff0c;这里是下载的最新版apache 2.2.22版本[rootb2b soft]#tar zxvf httpd-2.2.22.tar.gz[rootb2b soft]#cd http-2.2.17[rootb2b http-2.2.22]#./configure --prefix/home/apache2.2.22 --enable-so --enable-rewrite --enable-ssl --enable-mods-…

python写前端和js_Python之路【第十二篇】前端之jsdomejQuery

JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。1、存在方式functionfunc() {alert("Hello Shuaige")}2、javascrip…

mysql降级导入_mysql 升级和降级

1 官方推荐的两种升级方式&#xff1a;in-place upgradelogical upgrade2 升级之前&#xff1a;备份所有数据库&#xff0c;包括系统库mysql[rootDarren1 ~]# mysqldump -uroot -p147258 -A -B -F --master-data2 --events --single-transaction>/tmp/mysqlall.bak下载5.7.…

python process_Python Process/Thread 概念整理

进程与线程 并发与并行进程与线程首先要理解的是&#xff0c;我们的软件都是运行在操作系统之上&#xff0c;操作系统再控制硬件&#xff0c;比如 处理器、内存、IO设备等。操作系统为了向上层应用程序提供 简单一致 的机制来控制复杂而又大相径庭的低级硬件设备 抽象出 进程 的…

mysql技术内幕sampdb_MySQL技术内幕汇总

MySql技术内幕之MySQL入门(1)检查系统中是否已经安装了MySQLsudo netstat -tap | grep mysql若没有显示已安装结果&#xff0c;则没有安装。否则表示已经安装。sudo apt-get install mysql-server mysql-client安装过程中会让输入密码&#xff0c;记得把密码记住。登录mysql -u…

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

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

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

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

effective python目录_Effective python(七):协作开发

一&#xff0c;文档字符串1&#xff0c; 在函数&#xff0c;类&#xff0c;模块(顶端编写)下使用三个"""括起来内容即可2&#xff0c; 文档被关联到__doc__属性中&#xff0c;应尽量充分的描述其用法&#xff0c;作用&#xff0c;异常等等二&#xff0c;使用包来…

实用卷积神经网络 运用python pdf_解析卷积神经网络—深度学习实践手册 中文pdf高清版...

解析卷积神经网络—深度学习实践手册从实用角度着重解析了深度学习中的一类神经网络模型——卷积神经网络&#xff0c;向读者剖析了卷积神经网络的基本部件与工作机理&#xff0c;更重要的是系统性的介绍了深度卷积神经网络在实践应用方面的细节配置与工程经验。笔者希望本书“…

mysql语言和php语言_MySQL如何与PHP编程语言一起使用?

MySQL与PERL&#xff0c;C&#xff0c;C &#xff0c;JAVA和PHP等各种编程语言结合使用时效果很好。在这些语言中&#xff0c;PHP因其Web应用程序开发功能而成为最受欢迎的语言。PHP提供了各种功能来访问MySQL数据库并处理MySQL数据库内部的数据记录。您将需要以与调用其他任何…

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

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