谷粒商城 点击属性跳转页面

图片 标题 Base属性直接装配到model中,然后使用themeleaf取值即可。说一下saleAttr

思路
  1. 通过session在这里插入图片描述
    一晚上解决跨域和序列化无效后,发现如果这个对象放到sesssion中,那么每个请求session的服务都需要有这个VO,然而这个VO是和product包下的entity关联的,最后失败,至少VO不应该装在公共类下
  2. 参考拼多多
    在点击属性后不刷新页面,只有点击购买后在将数据提交。
    问题1:第一次需要的数据太多,一个spu下的图片很多,响应时间过长,用户体验不好
    问题2: 只发现手机端使用了这种方式,点击时刷新的还有标题,以我前端的水平,没有想到好方法
  3. 参考京东
    第一次加载就为每一个属性添加一个data_id属性,来装载skuId,之后请求时只需要取出属性,来做简单的页面跳转,这里主要的难点就是如何取出data_id

已有条件:

  • 一对多的属性表
  • 当前sku的所有信息
  • spuid

需求

  • 获取每个销售属性,且每一个属性的属性值都要附带一个skuid信息,方便跳转

设计

在这里插入图片描述
sql
针对一个属性:
传入其他属性的属性值,得到这个属性的所有属性值和对应的skuId
思路就是其他属性传进去用or连接,如果一个值满足其他属性值,那么它出现的次数等于出现传入属性的个数,count一下。

select attr_id, attr_name, attr_value, sku_id
from pms_sku_sale_attr_value
where sku_id in (select sku_id
                 from pms_sku_sale_attr_value
                 where (attr_name = '颜色' and attr_value = '金色')
                    or (attr_name = '外存' and attr_value = '128G')
                 group by sku_id
                 having count(sku_id) = 2)
  and attr_name != '颜色'
  and attr_name != '外存'
  and sku_id in (spu下的所有skuId)

这里如果关闭sql严格模式,可以省去一次子查询

mybatis映射

  • 传入的属性为map,可以用foreach取值
  • 最后结果集映射,value使用collection
   <resultMap id="SaleAttrItemVO" type="com.chen.product.vo.SaleAttrItemVO">
        <result property="attrId" column="attr_id"/>
        <result property="attrName" column="attr_name"/>
        <collection property="attrValues" ofType="com.chen.product.vo.AttrValue">
            <result property="value" column="attr_value"/>
            <result property="skuId" column="sku_id"/>
        </collection>
    </resultMap>

    <select id="getAttrAllValuesBySpuId" parameterType="map" resultMap="SaleAttrItemVO">
        select attr_id,attr_name,attr_value,sku_id from pms_sku_sale_attr_value where sku_id in (
            select sku_id from pms_sku_sale_attr_value
            where
            <foreach collection="map.entrySet()" item="value" index="key" separator="or">
                ( attr_name = #{key}and attr_value = #{value})
            </foreach>
            group by sku_id
            having count(sku_id) = ${map.size}
        )
        <foreach collection="map.entrySet()" item="value" index="key">
            and attr_name != #{key}
        </foreach>
        and sku_id in
        <foreach collection="list" item="item" open="(" close=")" separator=",">
           #{item}
        </foreach>
    </select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值