在上一篇《Spring Boot点餐系统实战(4)–买家商品API(上)》中已经为买家前台商品页面所需要的JSON数据进行了封装,最后还差 Controller 了中从数据库中查询数据进行数据拼接,再返回给前台了。
lambda 表达式
冗余度
1、数据库内容
product_category 表
product_info 表
2、最终的文件结构
BuyerProductController.java
注意:
1、我们必须先把数据从数据库中全部查出来,然后再用 for 循环(或者其他的方式)进行赋值拼接,而不要查一部分拼接一部分,因为数据库查询开销远远大于java虚拟机执行。
2、第 50-53 行使用 lambda 表达式( java 8推出的)来合成 list,跟 for 循环没什么区别。
3、第 74 行使用了是 Spring 框架中的一个方法,用来拷贝属性。
4、第 88 行新建了一个 ResultVOUtil 类,下面会写,从而减少了上面几行代码,减少冗余度
我们通常看到重复的代码就烦,一定要想办法把它建个类,让大家都可以调用它。一方面少些代码,另一方面也便于维护。
ResultVOUtil.java
最终,访问 http://localhost:8080/sell/buyer/product/list
由于,目前还没有建视图层,所以先返回 JSON 数据进行测试
本文链接:https://liuyanzhao.com/6669.html
本文新关键词
lambda 表达式
冗余度
一、基本准备
1、数据库内容
product_category 表
product_info 表
2、最终的文件结构
二、Controller 层的修改
BuyerProductController.java
- package com.liuyanzhao.sell.controller;
- import com.liuyanzhao.sell.VO.ProductInfoVO;
- import com.liuyanzhao.sell.VO.ProductVO;
- import com.liuyanzhao.sell.VO.ResultVO;
- import com.liuyanzhao.sell.entity.ProductCategory;
- import com.liuyanzhao.sell.entity.ProductInfo;
- import com.liuyanzhao.sell.service.CategoryService;
- import com.liuyanzhao.sell.service.ProductService;
- import com.liuyanzhao.sell.utils.ResultVOUtil;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.stream.Collectors;
- /**
- * @Author: 言曌
- * @Date: 2017/11/12
- * @Time: 下午12:13
- */
- @RestController
- @RequestMapping("/buyer/product")
- public class BuyerProductController {
- @Autowired
- private ProductService productService;
- @Autowired
- private CategoryService categoryService;
- @GetMapping("/list")
- public ResultVO list() {
- //1、查询所有的上架商品
- List<ProductInfo> productInfoList = productService.findUpAll();
- //2、查询类目(一次性查询)
- //传统方法
- // List<Integer> categoryTypeList = new ArrayList<>();
- // for(ProductInfo productInfo:productInfoList) {
- // categoryTypeList.add(productInfo.getCategoryType());
- // }
- //精简做法(java8,lambda)
- List<Integer> categoryTypeList = productInfoList.stream()
- .map(e -> e.getCategoryType())
- .collect(Collectors.toList());
- List<ProductCategory> productCategoryList = categoryService.findByCategoryTypeIn(categoryTypeList);
- //3、数据拼接
- List<ProductVO> productVOList = new ArrayList<>();
- for(ProductCategory productCategory:productCategoryList) {
- ProductVO productVO = new ProductVO();
- productVO.setCategoryName(productCategory.getCategoryName());
- productVO.setCategoryType(productCategory.getCategoryType());
- List<ProductInfoVO> productInfoVOList = new ArrayList<>();
- for(ProductInfo productInfo:productInfoList) {
- if(productInfo.getCategoryType().equals(productCategory.getCategoryType())) {
- //传统方法
- // ProductInfoVO productInfoVO = new ProductInfoVO();
- // productInfoVO.setProductId(productInfo.getProductId());
- // productInfoVO.setProductName(productInfo.getProductName());
- // productInfoVO.setProductPrice(productInfo.getProductPrice());
- // productInfoVO.setProductDescription(productInfo.getProductDescription());
- // productInfoVO.setProductIcon(productInfo.getProductIcon());
- //精简方法
- ProductInfoVO productInfoVO = new ProductInfoVO();
- BeanUtils.copyProperties(productInfo,productInfoVO);//从前者拷到后者中
- productInfoVOList.add(productInfoVO);
- }
- }
- productVO.setProductInfoVOList(productInfoVOList);
- productVOList.add(productVO);
- }
- // ResultVO resultVO = new ResultVO();
- // resultVO.setCode(0);
- // resultVO.setMsg("成功");
- // resultVO.setData(productVOList);
- // return resultVO;
- return ResultVOUtil.success(productVOList);
- }
- }
注意:
1、我们必须先把数据从数据库中全部查出来,然后再用 for 循环(或者其他的方式)进行赋值拼接,而不要查一部分拼接一部分,因为数据库查询开销远远大于java虚拟机执行。
2、第 50-53 行使用 lambda 表达式( java 8推出的)来合成 list,跟 for 循环没什么区别。
3、第 74 行使用了是 Spring 框架中的一个方法,用来拷贝属性。
4、第 88 行新建了一个 ResultVOUtil 类,下面会写,从而减少了上面几行代码,减少冗余度
三、新建一个 ResultVOUtil 降低前面代码的冗余度
我们通常看到重复的代码就烦,一定要想办法把它建个类,让大家都可以调用它。一方面少些代码,另一方面也便于维护。
ResultVOUtil.java
- package com.liuyanzhao.sell.utils;
- import com.liuyanzhao.sell.VO.ResultVO;
- /**
- * @Author: 言曌
- * @Date: 2017/11/12
- * @Time: 下午6:32
- */
- public class ResultVOUtil {
- public static ResultVO success(Object object) {
- ResultVO resultVo = new ResultVO();
- resultVo.setCode(0);
- resultVo.setMsg("成功");
- resultVo.setData(object);
- return resultVo;
- }
- public static ResultVO success() {
- return success(null);
- }
- public static ResultVO error(Integer code,String msg) {
- ResultVO resultVO = new ResultVO();
- resultVO.setCode(code);
- resultVO.setMsg(msg);
- return resultVO;
- }
- }
最终,访问 http://localhost:8080/sell/buyer/product/list
由于,目前还没有建视图层,所以先返回 JSON 数据进行测试
本文链接:https://liuyanzhao.com/6669.html
2017年11月13日 23:05:31
喜欢技术深入的文章,赞博主