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_对数据的操作的更多相关文章

  1. JAVASE02-Unit08: 文本数据IO操作 、 异常处理

    Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.i ...

  2. JAVASE02-Unit07: 基本IO操作 、 文本数据IO操作

    基本IO操作 . 文本数据IO操作 java标准IO(input/output)操作 package day07; import java.io.FileOutputStream; import ja ...

  3. MySQL的数据库,数据表,数据的操作

    数据库简介 概念 什么是数据库?简单来说,数据库就是存储数据的"仓库", 但是,光有数据还不行,还要管理数据的工具,我们称之为数据库管理系统! 数据库系统 = 数据库管理系统 + ...

  4. mysql数据表操作&库操作

    首先登陆mysql:mysql -uroot -proot -P3306 -h127.0.0.1 查看所有的库:show databases; 进入一个库:use database; 显示所在的库:s ...

  5. 谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制

    五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; publ ...

  6. 背景:表A数据误操作,被delete了,恢复。

    SELECT MAX(Scn) FROM Sys.Smon_Scn_Time WHERE Time_Dp < TO_DATE('2015-09-18', 'YYYY/MM/DD') select ...

  7. HealthKit开发快速入门教程之HealthKit数据的操作

    HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知道 ...

  8. MongoDB源码分析——mongod数据查询操作

    源码版本为MongoDB 2.6分支 Edit mongod数据查询操作 在mongod的初始化过程中说过,服务端接收到客户端消息后调用MyMessageHandler::process函数处理消息. ...

  9. 实现AT24C02的数据读写操作

    /*************************************************************** 功能:11:32 2008-6-27 作者:SG 时间:2004-03 ...

随机推荐

  1. thinkphp 多层mvc

    hinkPHP基于MVC(Model-View-Controller,模型-视图-控制器)模式,并且均支持多层(multi-Layer)设计. 模型(Model)层 默认的模型层由Model类构成,但 ...

  2. Git中.gitignore忽略规则

    # 此为注释 – 将被 Git 忽略 *.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TO ...

  3. dashboard服务

    1.上传镜像,并导入,打标签 2.创建dashboard的deployment和service apiVersion: extensions/v1beta1 kind: Deployment meta ...

  4. Go前言

    Go语言为并发而生 硬件制造商正在为处理器添加越来越多的内核以来提高性能.所有数据中心都在这些处理器上运行,今天的应用程序使用多个微服务来维护数据库连接,消息队列和维护缓存.所以,开发的软件和编程语言 ...

  5. shell 版本号比较_用shell如何比较软件版本号的大小

    比如你想写个脚本来比较两个版本号 (如"1.2.30" 和"1.3.0")来辨认哪个版本是最新的,有可以比较两个版本号字符串的shell脚本吗? 当你写了一个s ...

  6. Python3基础笔记_元组

    # Python3 元组 ''' Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运 ...

  7. csps模拟测试707172部分题解myc

    题面:https://www.cnblogs.com/Juve/articles/11678524.html 骆驼:构造题,留坑 根据5×5的矩形构造成大矩形 毛一琛: mid in the midd ...

  8. maven相互依赖导致无法编译成功

    起初是新加了个模块,启动前编译时error,提示找不到依赖模块的类,但java文件上是没有报错的. 后经过排查,发现是循环依赖导致的此问题. 如图,弹出框中有循环依赖的模块会显示红色,右键Open M ...

  9. 2019/10/24 CSP-S 模拟

    T1 tom 题意: 考虑一定是属于\(a\)的在一坨,属于\(b\)的在一坨,找到这条连接\(a\)和\(b\)的边,然后分别直接按\(dfs\)序染色即可 注意属于\(a\)的连通块或属于\(b\ ...

  10. 深入浅出 Java Concurrency (25): 并发容器 part 10 双向并发阻塞队列 BlockingDeque[转]

    这个小节介绍Queue的最后一个工具,也是最强大的一个工具.从名称上就可以看到此工具的特点:双向并发阻塞队列.所谓双向是指可以从队列的头和尾同时操作,并发只是线程安全的实现,阻塞允许在入队出队不满足条 ...