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 ...
随机推荐
- 【转载】OpenCL实现矩阵相乘
矩阵相乘其实就是前一个矩阵的每一行乘以后一个矩阵的每一列,然后将乘后的每一个数字相加,得到结果矩阵的指定位置的数值.具体算法回顾一下线性代数即可.但是这种行列相乘其实都是独立的,如果是CPU计算必须串 ...
- CentOS 7.2部署NTP服务器实现时间同步
CentOS 7.2部署NTP服务器实现时间同步 [日期:2017-12-18] 来源:Linux社区 作者:梁明远 [字体:大 中 小] 1. 前言 对于容器编排系统,前段时间主要研究kube ...
- 51nod-1130-N的阶乘的长度V2(斯特林近似)-套斯特林公式
输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. 输入 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 1000) 第2 - T + 1行:每 ...
- 使用Math.random()函数生成n到m间的随机数字
使用js生成n到m间的随机数字,主要目的是为后期的js生成验证码做准备,Math.random()函数返回0和1之间的伪随机数 讲解: 本文讲解如何使用js生成n到m间的随机数字,主要目的是为后期的j ...
- java.net.UnknownHostException 异常处理(转)
在linux系统下部署Java产品的集群环境时,后台报出如下异常,系统报找不到名为“QATest242”的主机: ERROR - Get local host name failed -com.tr ...
- Vim ---- 默认打开行号
Vim有非常迅速跳转到某一行行首的方法,例如 :n 或者 nG,n 表示到第 n 行. 但是Vim的显示行号功能默认是关闭的. 可用一下方法使Vim默认显示行号: 在配置文件 .vimrc 中,输入 ...
- 07.07NOIP模拟赛
考中 考试时不知道自己在想啥.. 拿到第一题:woc组合数学,第二题:woc组合数学,第三题,woc组合数学. 然后开始认真读题…… 我tm真是闲的... 第一题是15年山东省选题,感觉暴力搜索都没法 ...
- LUOGU P2831 愤怒的小鸟 (NOIP 2016)
题面 题解 好像昨天wxl大爷讲的是O(Tn*2^n)的做法,后来没想通,就自己写了个O(Tn^2*2^n)的暴力状压, 莫名其妙过了??数量级二十亿??懵逼,可能到了CCF老爷机上就T了.dp[S] ...
- Hystrix容错处理
如果服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直接提供者响应或超时.在高负载场景下,如果不做任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统的崩溃.这时,就需要进行容 ...
- springboot thymeleaf ----服务端渲染html
一. 引用命名空间 <html xmlns:th="http://www.thymeleaf.org"> 不这么写 html标签没闭合会报错 二.实际内容在../sta ...