联表查询一个商品的所有属性分组 属性组包含的属性 属性的值

sql语句

SELECT product.spu_id,ag.attr_group_id, ag.attr_group_name ,relation.attr_id,product.attr_name,product.attr_value
FROM pms_attr_group ag 
LEFT JOIN pms_attr_attrgroup_relation relation ON relation.attr_group_id=ag.attr_group_id
LEFT JOIN pms_product_attr_value product ON product.attr_id=relation.attr_id
WHERE ag.catelog_id=225 AND product.spu_id=7

在这里插入图片描述

AttrGroupDao.xml

205集 我们需要自定义结果集
因为我们返回的类型 SpuItemAttrGroupVo 里 还有一个实体类 SpuBaseAttrVo
识别不出来 只要有嵌套属性 就要封装自定义结果集
注意 如果是内部类 在xml文件里用$代替.
比如 SkuItemVo . SpuItemAttrGroupVo 不然识别不了 也可以像老师那样把内部类抽出来和SkuItemVo 平级 但是感觉这样破坏结构了


<!--resultType  是 返回集合里元素的类型   只要有嵌套属性  就要封装自定义结果集-->
    <resultMap id="SpuItemAttrGroupVo" type="com.kaki.gulimall.product.vo.SkuItemVo$SpuItemAttrGroupVo">
        <result property="groupName" column="attr_group_name"></result>
        <collection property="attrs" ofType="com.kaki.gulimall.product.vo.SkuItemVo$SpuBaseAttrVo">
            <result property="attrName" column="attr_name"></result>
            <result property="attrValue" column="attr_value"></result>
        </collection>
    </resultMap>
    <select id="getAttrGroupWithAttrsBySpuId"
            resultMap="SpuItemAttrGroupVo">
        SELECT product.spu_id,ag.attr_group_id, ag.attr_group_name ,relation.attr_id,product.attr_name,product.attr_value
        FROM pms_attr_group ag
        LEFT JOIN pms_attr_attrgroup_relation relation ON relation.attr_group_id=ag.attr_group_id
        LEFT JOIN pms_product_attr_value product ON product.attr_id=relation.attr_id
        WHERE ag.catelog_id=#{catalogId} AND product.spu_id=#{spuId}

    </select>

测试

com/kaki/gulimall/product/GulimallProductApplicationTests.java

  @Test
    public void testattrGroupDao(){
        List<SkuItemVo.SpuItemAttrGroupVo> attrGroupWithAttrsBySpuId = attrGroupDao.getAttrGroupWithAttrsBySpuId(225L, 7L);
        System.out.println("attrGroupWithAttrsBySpuId :"+attrGroupWithAttrsBySpuId);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值