一、购物车的存储形式-cookie
1、无须登陆、无须查库、保存在浏览器端
2、优点:性能好、访问快,没有和数据库交互
3、缺点1:换电脑购物车数据会丢失
4、缺点2:电脑被其他人登陆,隐私安全
二、购物车存储形式-session(不使用)
1、用户登陆后,购物车数据放入用户会话
2、优点:初期性能较好,访问快
3、缺点1:session基于内存,用户量庞大影响服务器性能
4、缺点2:只能存在与当前会话,不适用集群与分布式系统
三、购物车存储形式-数据库(不使用)
1、用户登陆后,购物车数据存入数据库
2、优点:数据持久化,可在任何地点任何时间访问
3、缺点:频繁读写数据库,造成数据库压力
四、购物车存储形式-redis
1、用户登陆后,购物车数据存入redis缓存
2、优点1:数据持久化,可在任何地点任何时间访问
3、优点2:频繁读写是基于缓存,不会造成数据库压力
4、优点3:适用于集群与分布式系统,可扩展性强
redis可以把数据持久化到磁盘里面去的
第一步:mapper接口层
public List<ShopCartVO> queryItemBySpecIds(@Param("paramsList") List specIdsList);
第二步:mapper层的sql语句
<select id="queryItemBySpecIds" parameterType="List" resultType="com.ljl.pojo.vo.ShopCartVO">
select
t_items.id as itemId,
t_items.item_name as itemName,
t_items_img.url as itemImgUrl,
t_items_spec.id as specId,
t_items_spec.'name' as specName,
t_items_spec.price_discount as priceDiscount,
t_items_spec.price_normal as priceNormal
from
items_spec t_items_spec
left join
items t_items
on t_items.id=t_items_spec.item_id
left join
items_img t_items_img
on
t_items_img.item_id =t_items.id
where
t_items_img.is_main=1
and
t_items_spec.id in
<foreach collection="paramsList" index="index" item="specId" open="(" separator="," close=")">
#{specId}
</foreach>
</select>
第三步:service层
/**
* 根据规格ids查询最新的购物车中商品数据(用于刷新渲染购物车中的商品数据)
* @param specIds
* @return
*/
public List<ShopCartVO> queryItemBySpecIds(String specIds);
第四步:service实现层
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public List<ShopCartVO> queryItemBySpecIds(String specIds) {
String[] ids=specIds.split(",");
List<String> specIdsList=new ArrayList<>();
//将ids里面的元数据添加到list里面去
Collections.addAll(specIdsList,ids);
return itemsMapperCustom.queryItemBySpecIds(specIdsList);
}
第五步:controller层
//用于用户长时间未登陆网站,刷新购物车中的数据(主要是商品价格)
@ApiOperation(value = "根据商品规格ids查找最新的商品数据",notes="根据商品规格ids查找最新的商品数据",httpMethod="GET")
@GetMapping("/refresh")
public JSONResult refresh(
@ApiParam(name="itemSpecIds",value="拼接的规格ids",required=true,example="1001,1003,1005")
@RequestParam String itemSpecIds){
if(StringUtils.isBlank(itemSpecIds)){
return JSONResult.ok();
}
List<ShopCartVO> list = itemService.queryItemBySpecIds(itemSpecIds);
return JSONResult.ok(list);
}