千峰商城-springboot项目搭建-62-分类商品推荐数据库实现

 按照商品的分类(一级分类)推销销量最高的6个商品。
一、流程分析
加载分类商品推荐有两种实现方案:
方案一:当加载首页时不加载分类的推荐商品,监听进度条滚动事件,当进度条触底(滚动指定的距离),就触发分类推荐商品的加载,每次只加载一个分类的商品。
方案二:一次性加载所有分类的推荐商品,整体进行初始化。
(1)方案一:
首页                   ——————一级分类的ID——————>            分类推荐商品
index.html    <————某个分类下的推荐商品————                    接口
1.获取一级分类id
2.查询当前一级分类下销量最高的6个商品
3.返回查询到的6个商品。
(2)方案二:
首页                    ————————ajax————————>            分类推荐商品
index.html    <————所有分类下的推荐商品————                    接口
1.分别获取所有一级分类下的销量最高的6个商品
2.返回查询到的所有分类下的6个商品

二、数据库实现SQL

1.数据准备

2.查询sql

#子查询:
#查询所有的一级分类
SELECT * FROM category WHERE category_level=1;
#查询每个分类项下销量前6的商品
SELECT * FROM product WHERE root_category_id=2 ORDER BY sold_num DESC LIMIT 0,6;
#查询每个商品的图片
SELECT * FROM product_img WHERE item_id=1;

#连接查询:
SELECT * FROM category c INNER JOIN product p ON p.root_category_id=c.category_id
WHERE category_level=1 ORDER BY p.sold_num DESC LIMIT 0,6;

三、数据库实现DAO及映射配置

1.实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class CategoryVO {
    private Integer categoryId;
    private String categoryName;
    private Integer categoryLevel;
    private Integer parentId;
    private String categoryIcon;
    private String categorySlogan;
    private String categoryPic;
    private String categoryBgColor;
    //实现首页分类商品推荐
    private List<ProductVO> products;
    //实现首页类别显示
    private List<CategoryVO> categories;

    
}

2.在mapper接口中定义查询方法

@Repository
public interface CategoryMapper extends GeneralDAO<Category> {
    //1.使用连接查询实现分类查询
    public List<CategoryVO> selectAllCategories();

    //2.子查询,就是根据parentId查询子分类
    public List<CategoryVO> selectAllCategories2(int parentId);
    
    //查询一级类别
    public List<CategoryVO> selectFirstLevelCategories();
    
}
ProductMapper :
@Repository
public interface ProductMapper extends GeneralDAO<Product> {
    public List<ProductVO> selectRecommendProducts();
    
    //查询指定一级类别下销量最高的6个商品
    public List<ProductVO> selectTop6ByCategory(int cid);

}

3.映射配置:

在查询商品的同时关联查询商品的图片

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qfedu.fmmall.dao.ProductMapper">
  <resultMap id="BaseResultMap" type="com.qfedu.fmmall.entity.Product">
    <id column="product_id" jdbcType="VARCHAR" property="productId" />
    <result column="product_name" jdbcType="VARCHAR" property="productName" />
    <result column="category_id" jdbcType="INTEGER" property="categoryId" />
    <result column="root_category_id" jdbcType="INTEGER" property="rootCategoryId" />
    <result column="sold_num" jdbcType="INTEGER" property="soldNum" />
    <result column="product_status" jdbcType="INTEGER" property="productStatus" />
    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
    <result column="content" jdbcType="LONGVARCHAR" property="content" />
  </resultMap>

  <resultMap id="ProductVOMap" type="com.qfedu.fmmall.entity.ProductVO">
    <id column="product_id" jdbcType="VARCHAR" property="productId" />
    <result column="product_name" jdbcType="VARCHAR" property="productName" />
    <result column="category_id" jdbcType="INTEGER" property="categoryId" />
    <result column="root_category_id" jdbcType="INTEGER" property="rootCategoryId" />
    <result column="sold_num" jdbcType="INTEGER" property="soldNum" />
    <result column="product_status" jdbcType="INTEGER" property="productStatus" />
    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
    <result column="content" jdbcType="LONGVARCHAR" property="content" />
    <collection property="imgs" select="com.qfedu.fmmall.dao.ProductImgMapper.selectProductImgByProductId" column="product_id"/>
  </resultMap>

  <select id="selectRecommendProducts" resultMap="ProductVOMap">
    SELECT
      product_id,
      product_name,
      category_id,
      root_category_id,
      sold_num,
      product_status,
      content,
      create_time,
      update_time
    FROM product
    ORDER BY create_time DESC
    LIMIT 0,3;
  </select>


  <select id="selectTop6ByCategory" resultMap="ProductVOMap">
    SELECT
      product_id,
      product_name,
      category_id,
      root_category_id,
      sold_num,
      product_status,
      content,
      create_time,
      update_time
    FROM product 
    WHERE root_category_id=#{cid}
    ORDER BY sold_num DESC LIMIT 0,6;
  </select>
</mapper>

在查询一级类别时,关联查询一级类别下销量最高的6个商品。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qfedu.fmmall.dao.CategoryMapper">
  <resultMap id="BaseResultMap" type="com.qfedu.fmmall.entity.Category">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="category_id" jdbcType="INTEGER" property="categoryId" />
    <result column="category_name" jdbcType="VARCHAR" property="categoryName" />
    <result column="category_level" jdbcType="INTEGER" property="categoryLevel" />
    <result column="parent_id" jdbcType="INTEGER" property="parentId" />
    <result column="category_icon" jdbcType="VARCHAR" property="categoryIcon" />
    <result column="category_slogan" jdbcType="VARCHAR" property="categorySlogan" />
    <result column="category_pic" jdbcType="VARCHAR" property="categoryPic" />
    <result column="category_bg_color" jdbcType="VARCHAR" property="categoryBgColor" />
  </resultMap>

  <resultMap id="categoryVOMap" type="com.qfedu.fmmall.entity.CategoryVO">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="category_id1" jdbcType="INTEGER" property="categoryId" />
    <result column="category_name1" jdbcType="VARCHAR" property="categoryName" />
    <result column="category_level1" jdbcType="INTEGER" property="categoryLevel" />
    <result column="parent_id1" jdbcType="INTEGER" property="parentId" />
    <result column="category_icon1" jdbcType="VARCHAR" property="categoryIcon" />
    <result column="category_slogan1" jdbcType="VARCHAR" property="categorySlogan" />
    <result column="category_pic1" jdbcType="VARCHAR" property="categoryPic" />
    <result column="category_bg_color1" jdbcType="VARCHAR" property="categoryBgColor" />
    <collection property="categories" ofType="com.qfedu.fmmall.entity.CategoryVO" javaType="list">
      <id column="category_id2" jdbcType="INTEGER" property="categoryId" />
      <result column="category_name2" jdbcType="VARCHAR" property="categoryName" />
      <result column="category_level2" jdbcType="INTEGER" property="categoryLevel" />
      <result column="parent_id2" jdbcType="INTEGER" property="parentId" />
      <collection property="categories" ofType="com.qfedu.fmmall.entity.CategoryVO" javaType="list">
        <id column="category_id3" jdbcType="INTEGER" property="categoryId" />
        <result column="category_name3" jdbcType="VARCHAR" property="categoryName" />
        <result column="category_level3" jdbcType="INTEGER" property="categoryLevel" />
        <result column="parent_id3" jdbcType="INTEGER" property="parentId" />
      </collection>
    </collection>
  </resultMap>

  <select id="selectAllCategories" resultMap="categoryVOMap">
    SELECT
      c1.category_id 'category_id1',
      c1.category_name 'category_name1',
      c1.category_level 'category_level1',
      c1.parent_id 'parent_id1',
      c1.category_icon 'category_icon1',
      c1.category_slogan 'category_slogan1',
      c1.category_pic 'category_pic1',
      c1.category_bg_color 'category_bg_color1',

      c2.category_id 'category_id2',
      c2.category_name 'category_name2',
      c2.category_level 'category_level2',
      c2.parent_id 'parent_id2',

      c3.category_id 'category_id3',
      c3.category_name 'category_name3',
      c3.category_level 'category_level3',
      c3.parent_id 'parent_id3'

    FROM category c1
           INNER JOIN category c2
                      ON c2.parent_id=c1.category_id
           LEFT JOIN category c3
                     ON c3.parent_id=c2.category_id
    WHERE c1.category_level=1
  </select>


  <resultMap id="categoryVOMap2" type="com.qfedu.fmmall.entity.CategoryVO">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="category_id" jdbcType="INTEGER" property="categoryId" />
    <result column="category_name" jdbcType="VARCHAR" property="categoryName" />
    <result column="category_level" jdbcType="INTEGER" property="categoryLevel" />
    <result column="parent_id" jdbcType="INTEGER" property="parentId" />
    <result column="category_icon" jdbcType="VARCHAR" property="categoryIcon" />
    <result column="category_slogan" jdbcType="VARCHAR" property="categorySlogan" />
    <result column="category_pic" jdbcType="VARCHAR" property="categoryPic" />
    <result column="category_bg_color" jdbcType="VARCHAR" property="categoryBgColor" />
    <collection property="categories" column="category_id" select="com.qfedu.fmmall.dao.CategoryMapper.selectAllCategories2"/>
  </resultMap>


<!--  根据父级分类的id查询子级分类-->
  <select id="selectAllCategories2" resultMap="categoryVOMap2">
    select
      category_id,
      category_name,
      category_level,
      parent_id,
      category_icon,
      category_slogan,
      category_pic,
      category_bg_color
    from category
    where parent_id=#{parentId}

  </select>


  <resultMap id="categoryVOMap3" type="com.qfedu.fmmall.entity.CategoryVO">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="category_id" jdbcType="INTEGER" property="categoryId" />
    <result column="category_name" jdbcType="VARCHAR" property="categoryName" />
    <result column="category_level" jdbcType="INTEGER" property="categoryLevel" />
    <result column="parent_id" jdbcType="INTEGER" property="parentId" />
    <result column="category_icon" jdbcType="VARCHAR" property="categoryIcon" />
    <result column="category_slogan" jdbcType="VARCHAR" property="categorySlogan" />
    <result column="category_pic" jdbcType="VARCHAR" property="categoryPic" />
    <result column="category_bg_color" jdbcType="VARCHAR" property="categoryBgColor" />
    <collection property="products" select="com.qfedu.fmmall.dao.ProductMapper.selectTop6ByCategory" column="category_id"/>
  </resultMap>

  <select id="selectFirstLevelCategories" resultMap="categoryVOMap3">
    select
      category_id,
      category_name,
      category_level,
      parent_id,
      category_icon,
      category_slogan,
      category_pic,
      category_bg_color
    FROM category WHERE category_level=1;
  </select>
</mapper>

单元测试:

    @Test
    public void testSelectFirstLevelCategory(){
        List<CategoryVO> categoryVOS = categoryMapper.selectFirstLevelCategories();
        for (CategoryVO categoryVO:categoryVOS){
            System.out.println(categoryVO);
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
千峰是一个IT培训机构,致力于提供高质量的前端培训课程。其中,Vue是千峰的核心课程之一,也是目前前端领域最受欢迎的JavaScript框架之一。Vue具有简洁易学的特点,使得开发者可以快速构建交互式的用户界面。 Vue具有以下特点: 1. 响应式数据绑定:Vue采用了一种数据驱动的思想,可以将数据与DOM元素进行绑定,当数据改变时,对应的DOM元素会自动更新,实现页面的动态渲染。 2. 组件化开发:Vue将UI页面拆分为多个组件,每个组件都有自己的逻辑和样式,可以实现组件的高复用性,提高开发效率。 3. 虚拟DOM:Vue通过虚拟DOM技术优化了页面渲染的效率,当数据变化时,Vue会先将页面的变动进行diff算法比较,然后只更新需要更新的部分,减少了不必要的性能消耗。 4. 生态丰富:Vue有庞大的社区支持,拥有许多开源组件库,例如Element UI和Vuetify等,可以方便地集成到自己的项目中,加快开发速度。 5. 完善的文档和学习资源:Vue拥有详细的官方文档和丰富的学习资源,对于初学者来说很友好,可以帮助开发者快速入门和提升技术。 在千峰的Vue课程中,学员将学习Vue框架的使用以及相关的生态技术,包括Vue Router、VueX等,还会通过实战项目进行实践,提升实际开发能力。课程采用了理论结合实践的教学方法,注重实际项目开发经验的分享。 总之,千峰的Vue课程是一个很好的学习机会,通过学习Vue,可以快速掌握前端开发的技能,提高自己在职场上的竞争力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值