最终效果

image.png

查看数据库表涉及字段

image.png

编写SQL查询

  1. SELECT
  2. i.id AS itemId,
  3. i.item_name AS itemName,
  4. i.sell_counts AS sellCounts,
  5. ii.url AS imgUrl,
  6. tempSpec.price_discount AS price
  7. FROM
  8. items i
  9. LEFT JOIN
  10. items_img ii
  11. ON
  12. i.id = ii.item_id
  13. LEFT JOIN
  14. (
  15. SELECT
  16. item_id,MIN(price_discount) AS price_discount
  17. FROM
  18. items_spec
  19. GROUP BY
  20. item_id
  21. ) tempSpec
  22. ON
  23. i.id = tempSpec.item_id
  24. WHERE
  25. ii.is_main = 1
  26. AND
  27. i.on_off_status = 1
  28. =======================================================================================
  29. # 查询商品及图片
  30. SELECT
  31. i.id AS itemId,
  32. i.item_name AS itemName,
  33. i.sell_counts AS sellCounts,
  34. ii.url AS imgUrl
  35. FROM
  36. items i
  37. LEFT JOIN
  38. items_img ii
  39. ON
  40. i.id = ii.item_id
  41. WHERE
  42. ii.is_main = 1
  43. AND
  44. i.on_off_status = 1
  45. # 查询商品最低价
  46. SELECT
  47. item_id,MIN(price_discount) AS price_discount
  48. FROM
  49. items_spec
  50. GROUP BY
  51. item_id

image.png

编写mapper

  1. <select id="searchItems" parameterType="Map" resultType="com.shiers.pojo.vo.SearchItemsVO">
  2. SELECT
  3. i.id AS itemId,
  4. i.item_name AS itemName,
  5. i.sell_counts AS sellCounts,
  6. ii.url AS imgUrl,
  7. tempSpec.price_discount AS price
  8. FROM
  9. items i
  10. LEFT JOIN
  11. items_img ii
  12. ON
  13. i.id = ii.item_id
  14. LEFT JOIN
  15. (
  16. SELECT
  17. item_id,MIN(price_discount) AS price_discount
  18. FROM
  19. items_spec
  20. GROUP BY
  21. item_id
  22. ) tempSpec
  23. ON
  24. i.id = tempSpec.item_id
  25. WHERE
  26. ii.is_main = 1
  27. AND
  28. i.on_off_status = 1
  29. <if test="paramsMap.keywords != null and paramsMap.keywords != '' ">
  30. 🔥🔥🔥这里使用模糊查询,要对%进行拼接所以使用 ${} 而不是#🔥🔥🔥
  31. AND i.item_name LIKE '%${paramsMap.keywords}%'
  32. </if>
  33. ORDER BY
  34. <choose>
  35. 🔥🔥🔥
  36. k:默认,代表默认排序,根据name
  37. c:根据销量排序
  38. p:根据价格排序
  39. 🚨🚨🚨 这里的单引号需要转义为: &quot; 🚨🚨🚨
  40. 🔥🔥🔥
  41. <when test=" paramsMap.sort == &quot;c&quot; ">
  42. i.sell_counts desc
  43. </when>
  44. <when test=" paramsMap.sort == &quot;p&quot; ">
  45. tempSpec.price_discount asc
  46. </when>
  47. <otherwise>
  48. i.item_name asc
  49. </otherwise>
  50. </choose>
  51. </select>

编写service

  1. @Transactional(propagation = Propagation.SUPPORTS)
  2. @Override
  3. public PagedGridResult searchItems(String keywords, String sort, Integer page, Integer pageSize) {
  4. Map<String, Object> map = new HashMap<>();
  5. map.put("keywords", keywords);
  6. map.put("sort", sort);
  7. /**
  8. * page:第几页
  9. * pageSize:每页显示条数
  10. */
  11. PageHelper.startPage(page, pageSize);
  12. List<SearchItemsVO> list = itemsMapperCustom.searchItems(map);
  13. return setterPagedGrid(list,page);
  14. }

编写Controller

  1. @ApiOperation(value = "搜索商品列表", notes = "搜索商品列表", httpMethod = "GET")
  2. @GetMapping("/search")
  3. public MyJSONResult search(
  4. @ApiParam(name = "keywords", value = "关键字", required = true)
  5. @RequestParam String keywords,
  6. @ApiParam(name = "sort", value = "排序", required = false)
  7. @RequestParam String sort,
  8. @ApiParam(name = "page", value = "查询下一页的第几页", required = false)
  9. @RequestParam Integer page,
  10. @ApiParam(name = "pageSize", value = "分页的每一页显示的条数", required = false)
  11. @RequestParam Integer pageSize) {
  12. if (StringUtils.isBlank(keywords)) {
  13. return MyJSONResult.errorMsg(null);
  14. }
  15. if (page == null) {
  16. page = 1;
  17. }
  18. if (pageSize == null) {
  19. pageSize = PAGE_SIZE;
  20. }
  21. PagedGridResult grid = itemService.searchItems(keywords, sort, page, pageSize);
  22. return MyJSONResult.ok(grid);
  23. }