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);
}
测试结果如下,与数据库一致
至此数据准备环节结束,下一节进行页面的渲染