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 ...
随机推荐
- csv文件格式
弱渣今天第一次读Kaggle入门文章,知道train data,test data以及提供的result文件大都是以csv文件格式给出的. csv,全称 Comma-Separated Values, ...
- play framework 从环境搭建到简单运行
download 官网:https://www.playframework.com/ 将zip下载至本地,进行unzip. 环境变量 检测是否安装成功:解压成功后进入解压的目录,运行 play 终端显 ...
- 纯CSS3实现图片展示特效
本文中要实现的一个纯CSS3的图片展示特效,以前只能用JavaScript实现,可想而知会受到多方面的限制,特别是性能.而今天我们将用简单的CSS3代码实现,你会发现它的动画效果在现代浏览器的帮助下无 ...
- WEB前端使用的CSS3选择器
首先说first-child与last-child,这两个选择器很容易明白,就是父元素下的第一个子元素和最后一个子元素.而nth-child和nth-last-child则是父元素下指定序号的子元素, ...
- Walk Through Squares HDU - 4758 AC自动机+简单状压DP
题意:给你两个串,求用m个R,n个D能组成多少个包含这两个串 题解:先构造一个AC自动机记录每个状态包含两个串的状态, 状态很容易定义 dp[i][j][k][status]表示在AC自动机K这个节点 ...
- 面试系列24 dubbo负载均衡策略和集群容错策略
(1)dubbo负载均衡策略 1)random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重 ...
- LeetCode 8.字符串转换整数 (atoi)(Python3)
题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...
- Reboot- Linux必学的60个命令
1.作用 reboot命令的作用是重新启动计算机,它的使用权限是系统管理者. 2.格式 reboot [-n] [-w] [-d] [-f] [-i] 3.主要参数 -n: 在重开机前不做将记忆体资料 ...
- nodejs实现读取文件
今天后端同事下班,想让我读取一个文件的内容.我想这个是小忙啊,就立马答应了. 我知道这个是nodejs读取,可是我又想,平时我们都要起一个服务才能够运行node服务器, 比如如下代码 var http ...
- E. Present for Vitalik the Philatelist 反演+容斥
题意:给n个数\(a_i\),求选一个数x和一个集合S不重合,gcd(S)!=1,gcd(S,x)==1的方案数. 题解:\(ans=\sum_{i=2}^nf_ig_i\),\(f_i\)是数组中和 ...