day128-商城业务-商品详情-销售属性组合

1.sql

母的是查出某spu下所有销售属性的组合

SELECT ssav.`attr_id`,ssav.`attr_name`,
	GROUP_CONCAT( DISTINCT ssav.attr_value)
FROM pms_sku_info  si
LEFT JOIN pms_sku_sale_attr_value ssav ON ssav.`sku_id` = si.`sku_id`
WHERE si.`spu_id` = 3 
GROUP BY ssav.`attr_id`,ssav.`attr_name` 

查询结果如下

2.各层代码

dao层

SkuSaleAttrValueDao.xml

<?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.atguigu.gulimall.product.dao.SkuSaleAttrValueDao">

	<!-- 可根据自己的需求,是否要使用 -->
    <resultMap type="com.atguigu.gulimall.product.entity.SkuSaleAttrValueEntity" id="skuSaleAttrValueMap">
        <result property="id" column="id"/>
        <result property="skuId" column="sku_id"/>
        <result property="attrId" column="attr_id"/>
        <result property="attrName" column="attr_name"/>
        <result property="attrValue" column="attr_value"/>
        <result property="attrSort" column="attr_sort"/>
    </resultMap>
    <select id="getSaleAttrvaluesBySpuId" resultType="com.atguigu.gulimall.product.vo.SkuItemSaleAttrVo"
            parameterType="java.lang.Long">
        SELECT ssav.`attr_id`,
              ssav.`attr_name`,
            GROUP_CONCAT( DISTINCT ssav.attr_value) attr_values
        FROM pms_sku_info  si
        LEFT JOIN pms_sku_sale_attr_value ssav ON ssav.`sku_id` = si.`sku_id`
        WHERE si.`spu_id` = #{spuId}
        GROUP BY ssav.`attr_id`,ssav.`attr_name`

    </select>


</mapper>

SkuSaleAttrValueDao.java

package com.atguigu.gulimall.product.dao;

import com.atguigu.gulimall.product.entity.SkuSaleAttrValueEntity;
import com.atguigu.gulimall.product.vo.SkuItemSaleAttrVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * sku销售属性&值
 *
 * @author leifengyang
 * @email leifengyang@gmail.com
 * @date 2019-10-01 21:08:49
 */
@Mapper
public interface SkuSaleAttrValueDao extends BaseMapper<SkuSaleAttrValueEntity> {

    List<SkuItemSaleAttrVo> getSaleAttrvaluesBySpuId(Long spuId);
}

service层

SkuSaleAttrValueService 

package com.atguigu.gulimall.product.service;

import com.atguigu.gulimall.product.vo.SkuItemSaleAttrVo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.atguigu.common.utils.PageUtils;
import com.atguigu.gulimall.product.entity.SkuSaleAttrValueEntity;

import java.util.List;
import java.util.Map;

/**
 * sku销售属性&值
 *
 * @author leifengyang
 * @email leifengyang@gmail.com
 * @date 2019-10-01 21:08:49
 */
public interface SkuSaleAttrValueService extends IService<SkuSaleAttrValueEntity> {

    PageUtils queryPage(Map<String, Object> params);

    List<SkuItemSaleAttrVo> getSaleAttrvaluesBySpuId(Long spuId);
}

SkuSaleAttrValueServiceImpl  

package com.atguigu.gulimall.product.service.impl;

import com.atguigu.gulimall.product.vo.SkuItemSaleAttrVo;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.atguigu.common.utils.PageUtils;
import com.atguigu.common.utils.Query;

import com.atguigu.gulimall.product.dao.SkuSaleAttrValueDao;
import com.atguigu.gulimall.product.entity.SkuSaleAttrValueEntity;
import com.atguigu.gulimall.product.service.SkuSaleAttrValueService;


@Service("skuSaleAttrValueService")
public class SkuSaleAttrValueServiceImpl extends ServiceImpl<SkuSaleAttrValueDao, SkuSaleAttrValueEntity> implements SkuSaleAttrValueService {

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<SkuSaleAttrValueEntity> page = this.page(
                new Query<SkuSaleAttrValueEntity>().getPage(params),
                new QueryWrapper<SkuSaleAttrValueEntity>()
        );

        return new PageUtils(page);
    }

    @Override
    public List<SkuItemSaleAttrVo> getSaleAttrvaluesBySpuId(Long spuId) {
        List<SkuItemSaleAttrVo> skuItemSaleAttrVos = baseMapper.getSaleAttrvaluesBySpuId(spuId);
        return  skuItemSaleAttrVos;
    }

}
SkuInfoServiceImpl
    @Autowired
    SkuImagesService skuImagesService;

    @Autowired
    SpuInfoDescService SpuInfoDescService;

    @Autowired
    AttrGroupService attrGroupService;

    @Autowired
    SkuSaleAttrValueService skuSaleAttrValueService;

    @Override
    public ItemVo queryItemById(Long skuId) {

        ItemVo itemVo = new ItemVo();

        //1.sku基本信息
        SkuInfoEntity skuInfoEntity = getById(skuId);
        itemVo.setSkuInfoEntity(skuInfoEntity);

        Long spuId = skuInfoEntity.getSpuId();
        Long catalogId = skuInfoEntity.getCatalogId();

        //2.sku的图片信息
        List<SkuImagesEntity> skuImagesEntitys = skuImagesService.getImagesBySkuId(skuId);
        itemVo.setSkuImagesEntitys(skuImagesEntitys);

        //3.sku的销售属性
        List<SkuItemSaleAttrVo> skuItemSaleAttrVos = skuSaleAttrValueService.getSaleAttrvaluesBySpuId(spuId);
        itemVo.setSkuItemSaleAttrVos(skuItemSaleAttrVos);

        //4.spu的介绍
        SpuInfoDescEntity spuInfoDescEntity = SpuInfoDescService.getById(spuId);
        itemVo.setSpuInfoDescEntity(spuInfoDescEntity);

        //5.spu的规格参数信息(基本属性)
        List<SpuItemAttrGroupVo> spuItemAttrGroupVos = attrGroupService.getAttrGroupWithAttrsByCatIdAndSpuId(spuId,catalogId);
        return itemVo;
    }

 

单元测试

    @Autowired
    SkuSaleAttrValueDao skuSaleAttrValueDao;   

 @Test
    public  void testSaleAttr(){
        List<SkuItemSaleAttrVo> saleAttrvaluesBySpuId = skuSaleAttrValueDao.getSaleAttrvaluesBySpuId(3l);
        System.out.println("saleAttrvaluesBySpuId"+saleAttrvaluesBySpuId);
    }

测试结果如下,与数据库一致

至此数据准备环节结束,下一节进行页面的渲染

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我才是真的封不觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值