• 千峰商城-springboot项目搭建-64-商品详情数据库实现及业务层和控制层实现


    点击首页推荐的商品、轮播图商品广告、商品列表页面点击商品,就会进入到商品的详情页面。
    一、流程分析
    点击推荐商品    ———商品ID———>                 商品详情                            ————商品ID————>         商品详情
                                                          <———商品详情————      接口
    轮播图广告    ————商品ID———>                                                           ————商品ID————>         商品详情
                                                          <———商品参数————       参数接口
                                                          <———商品评论————       评论接口
    1.获取商品ID
    2.根据id查询商品详情(商品基本信息、商品套餐、商品图片、商品参数、商品评价)
    3.将商品详情返回给前端
    二、接口实现
    1.商品详情接口
    商品基本信息、商品套餐、商品图片
    SQL:
    1. #根据商品id查询商品基本信息
    2. SELECT * FROM product WHERE product_id=1;
    3. SELECT * FROM product p
    4. INNER JOIN product_img i
    5. INNER JOIN product_sku s
    6. ON p.product_id=i.item_id
    7. AND p.product_id=s.product_id
    8. WHERE p.product_id=3;
    9. SELECT * FROM product p
    10. INNER JOIN product_img i
    11. ON p.product_id=i.item_id
    12. WHERE p.product_id=3;
    13. #子查询:根据商品id查询当前商品的套餐
    14. SELECT * FROM product WHERE product_id=3;
    15. #根据商品id查询当前商品的图片
    16. SELECT * FROM product_img WHERE item_id=3;
    17. #根据商品id查询当前商品的套餐
    18. SELECT * FROM product_sku WHERE product_id=3;

     因为上述子查询的三个查询都是单表查询,所以可以通过tkMapper完成。

    三、业务层实现

     ProductService

    1. public interface ProductService {
    2. public ResultVO listRecommendProducts();
    3. public ResultVO getProductBasicInfo(String productId);
    4. }

     ProductServiceImpl

    1. @Service
    2. public class ProductServiceImpl implements ProductService {
    3. @Autowired
    4. private ProductMapper productMapper;
    5. @Autowired
    6. private ProductImgMapper productImgMapper;
    7. @Autowired
    8. private ProductSkuMapper productSkuMapper;
    9. public ResultVO listRecommendProducts() {
    10. List productVOS = productMapper.selectRecommendProducts();
    11. ResultVO resultVO = new ResultVO(ResStatus.OK, "success", productVOS);
    12. return resultVO;
    13. }
    14. @Transactional(propagation = Propagation.SUPPORTS)
    15. public ResultVO getProductBasicInfo(String productId) {
    16. //1.商品信息
    17. Example example = new Example(Product.class);
    18. Example.Criteria criteria = example.createCriteria();
    19. criteria.andEqualTo("productId",productId);
    20. criteria.andEqualTo("productStatus",1);//状态为1表示上架商品
    21. List products = productMapper.selectByExample(example);
    22. if (products.size()>0){
    23. //2,商品图片
    24. Example example1 = new Example(ProductImg.class);
    25. Example.Criteria criteria1 = example1.createCriteria();
    26. criteria1.andEqualTo("itemId",productId);
    27. List productImgs = productImgMapper.selectByExample(example1);
    28. //3.商品套餐
    29. Example example2 = new Example(ProductSku.class);
    30. Example.Criteria criteria2 = example2.createCriteria();
    31. criteria2.andEqualTo("productId",productId);
    32. criteria2.andEqualTo("status",1);
    33. List productSkus = productSkuMapper.selectByExample(example2);
    34. HashMap basicInfo = new HashMap<>();
    35. basicInfo.put("product",products.get(0));
    36. basicInfo.put("productImgs",productImgs);
    37. basicInfo.put("productSkus",productSkus);
    38. return new ResultVO(ResStatus.OK,"success",basicInfo);
    39. }else {
    40. return new ResultVO(ResStatus.NO,"查询的商品不存在",null);
    41. }
    42. }
    43. }

    四、控制层实现

     ProductController

    1. @RestController
    2. @CrossOrigin
    3. @RequestMapping("/product")
    4. @Api(value = "提供商品信息相关的接口",tags = "商品管理")
    5. public class ProductController {
    6. @Autowired
    7. private ProductService productService;
    8. @ApiOperation("商品基本信息查询接口")
    9. @GetMapping("/detail-info/{pid}")
    10. public ResultVO getProductBasicInfo(@PathVariable("pid") String pid){
    11. return productService.getProductBasicInfo(pid);
    12. }
    13. }
     测试:
  • 相关阅读:
    《HCIP-openEuler实验指导手册》1.3Apache动态功能模块加载卸载练习
    参与活动如何进行地区的限制
    如何申请办理400电话?
    【vue+nestjs】gitee第三方授权登录【超详细】
    【Python数据科学快速入门系列 | 09】Matplotlib数据关系图表应用总结
    OpenCV安装、QT、VS配置项目设置
    企业安全不求人,一个小技巧就能搞定
    微服务之流控、容错组件sentinel
    深度学习与视频直播美颜sdk:背后的技术革新
    linux的rmdir 删除一个空的目录、touch 创建空文件、cp 复制文件或目录
  • 原文地址:https://blog.csdn.net/LYly_B/article/details/125896553