leyou_07_对数据的操作
1.目标在数据库的两张表中拿到以下数据,并完成状态、搜索和分页功能

实体类Spu(页面需要的数据)

实体类Category(页面需要的数据) name:商品分类

2.分析:
返回的数据在两个实体类中,但我们不能修改实体类数据表,需要创建一个Bo实体类将需要的数据合并到一起

3.业务逻辑代码
@Service
public class GoodsService {
@Autowired
private SpuMapper supMapper; @Autowired
private BrandMapper brandMapper; @Autowired
private SpuDetailMapper spuDetailMapper; @Autowired
private CategoryService categoryService; /**
* 更具条件分页查询Spu
* 请求地址: http://api.leyou.com/api/item/spu/page?key=&saleable=true&page=1&rows=5
*
* @param key
* @param saleable
* @param page
* @param rows
* @return
*/
public PageResult<SpuBo> querySpuByPage(String key, Boolean saleable, Integer page, Integer rows) {
//添加查询条件
Example example = new Example(Spu.class);
Example.Criteria criteria = example.createCriteria(); if (StringUtils.isNotBlank(key)) {
criteria.andLike("title", "%" + key + "%");
}
//添加上下架的过滤条件
if (saleable != null) {
criteria.andEqualTo("saleable", saleable);
}
//添加分页
PageHelper.startPage(page, rows); //执行查询,获得spu集合
List<Spu> spus = supMapper.selectByExample(example);
PageInfo<Spu> spuPageInfo = new PageInfo<>(spus); //spu转化为SpuBo
List<SpuBo> spuBos = spus.stream().map(spu -> {
SpuBo spuBo = new SpuBo();
BeanUtils.copyProperties(spu, spuBo); Brand brand = brandMapper.selectByPrimaryKey(spu.getBrandId());
//查询品牌名称
spuBo.setBname(brand.getName()); //查询分类名称
List<String> names = categoryService.queryNameByIds(Arrays.asList(spu.getCid1(), spu.getCid2(), spu.getCid3()));
spuBo.setCname(StringUtils.join(names, "-"));
return spuBo; }).collect(Collectors.toList());
//返回pageResult<SpuBo>
return new PageResult<>(spuPageInfo.getTotal(),spuBos);
}
}
4.代码分析
1>通过example.createCriteria();拼接查询条件
2>spu代码分析:
BeanUtils.copyProperties(spu, spuBo);

将一个Object对象赋值给一个Object对象
//spu转化为SpuBo
List<SpuBo> spuBos = spus.stream().map(spu -> {
SpuBo spuBo = new SpuBo();
BeanUtils.copyProperties(spu, spuBo); Brand brand = brandMapper.selectByPrimaryKey(spu.getBrandId());
//查询品牌名称
spuBo.setBname(brand.getName()); //查询分类名称
List<String> names = categoryService.queryNameByIds(Arrays.asList(spu.getCid1(), spu.getCid2(), spu.getCid3()));
spuBo.setCname(StringUtils.join(names, "-"));
return spuBo; }).collect(Collectors.toList());
jdk8的特性stream().map() 将对象转换成另一个对象
List<SpuBo> spuBos = spus.stream().map(spu -> {}).collect(Collectors.toList());
循环List<Spu> spus 集合,将每一项赋值给spu,可以在{}中进行数据处理,最后分装到spuBos集合中去
3>spuBo.setCname(StringUtils.join(names, "-"));
将一个集合中的元素全部用字符串拼接,以"-"为分隔符,并且最后没有"-"号。效果a-b-c
4>selectByIdList(ids)的用法:遍历ids多次执行查询语句
需要继承:public interface CategoryMapper extends Mapper<Category>,SelectByIdListMapper<Category,Long> {
}
selectByIdList(ids):方法的作用
通俗的讲就是:遍历ids中的所有的元素,并执行select查询,返回多个结果封装到集合中
List<Category> categories = categoryMapper.selectByIdList(ids);
5>Arrays.List(value1,value2,value3...)将value封装到集合中去
List<String> names = categoryService.queryNameByIds(Arrays.asList(spu.getCid1(), spu.getCid2(), spu.getCid3()));
leyou_07_对数据的操作的更多相关文章
- JAVASE02-Unit08: 文本数据IO操作 、 异常处理
Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.i ...
- JAVASE02-Unit07: 基本IO操作 、 文本数据IO操作
基本IO操作 . 文本数据IO操作 java标准IO(input/output)操作 package day07; import java.io.FileOutputStream; import ja ...
- MySQL的数据库,数据表,数据的操作
数据库简介 概念 什么是数据库?简单来说,数据库就是存储数据的"仓库", 但是,光有数据还不行,还要管理数据的工具,我们称之为数据库管理系统! 数据库系统 = 数据库管理系统 + ...
- mysql数据表操作&库操作
首先登陆mysql:mysql -uroot -proot -P3306 -h127.0.0.1 查看所有的库:show databases; 进入一个库:use database; 显示所在的库:s ...
- 谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制
五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; publ ...
- 背景:表A数据误操作,被delete了,恢复。
SELECT MAX(Scn) FROM Sys.Smon_Scn_Time WHERE Time_Dp < TO_DATE('2015-09-18', 'YYYY/MM/DD') select ...
- HealthKit开发快速入门教程之HealthKit数据的操作
HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知道 ...
- MongoDB源码分析——mongod数据查询操作
源码版本为MongoDB 2.6分支 Edit mongod数据查询操作 在mongod的初始化过程中说过,服务端接收到客户端消息后调用MyMessageHandler::process函数处理消息. ...
- 实现AT24C02的数据读写操作
/*************************************************************** 功能:11:32 2008-6-27 作者:SG 时间:2004-03 ...
随机推荐
- 使用Intellij中的Spring Initializr来快速构建Spring Boot工程
本文将介绍嵌入的Intellij中的Spring Initializr工具,它同Web提供的创建功能一样,可以帮助我们快速的构建出一个基础的Spring Boot/Cloud工程. 1.菜单栏中选择F ...
- thinkphp 空控制器
空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化. 大理石平台价格表 现在我们把前 ...
- vuecli脚手架+vue+vuex实现vue驱动的demo。
哎呀呀呀,现在大家都要会Vue || React,否则感觉跟这个前端的世界脱节了一样. start: vue-cli这个构建工具大大降低了webpack的使用难度,支持热更新,有webpack-de ...
- 网络安全系列 之 MySQL数据库安全
目录 数据库安全使用规则 1. 数据库版本及运行要求 2. 通用加固项 3. 用户权限 4. 连接设置 5. ssl安全认证 6. 涉及操作系统相关配置 6.1 系统资源 6.2 文件权限 数据库安全 ...
- 数据可视化(matplotilb)
一,matplotilb库(数学绘图库) mat数学 plot绘图 lib库 matplotlib.pyplot(缩写mp)->python 最常用接口 mp.plot(水平坐标,垂直坐标数组 ...
- InfluxDB的安装和简介
InfluxDB简介 InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载.它是TICK堆栈的组成部分 .InfluxDB旨在用作涉及大量带时间戳数据的任何用例的后备存储,包括DevOps监 ...
- 面试系列19 redis的雪崩和穿透
缓存雪崩发生的现象 缓存雪崩的事前事中事后的解决方案 事前:redis高可用,主从+哨兵,redis cluster,避免全盘崩溃 事中:本地ehcache缓存 + hystrix限流&降级, ...
- vue表格之:summary-method="getSummaries"与show-summary(列求和)
//表格列求和 <el-table :summary-method="getSummaries" show-summary></el-table> getS ...
- wpf 纯样式写按钮
<!--自定义按钮样式--> <LinearGradientBrush x:Key="LinearGradientBlueBackground" EndPoint ...
- springboot整合shiro的使用
shiro的原理已经有博客了,自己写可以问度娘 参考https://www.cnblogs.com/liyinfeng/p/8033869.html 此处直接描述实际使用 一.pom.xml引包 &l ...