购物车中列表功能,也是购物车的一个重要功能,购物车页面的商品列表是一个List对象和一些总览性字段。以下主要讲述购物车列表功能的主要实现步骤和代码。
一、数据格式的定义
购物项列表数据中的商品标题字段、商品预览图字段、商品价格字段可以通过购物项表中的goods_id 来关联和查询,而其商品数量字段通过购物项表来查询,列表还有一个删除按钮,因此需要返回购物项的id字段。总览性数据包括加购总量字段和总价字段。返回数据的格式为购物项列表数据+加购总量字段+总价字段。购物项VO对象编码如下所示:
public class NewBeeMallShoppingCartItemVO implements Serializable {
private Long cartItemId;
private Long goodsId;
private Integer goodsCount;
private String goodsName;
private String goodsCoverImg;
private Integer sellingPrice;
}
二、购物车列表数据的获取
购物车列表中的字段可以分别通过查询shopping_cart_item购物项表和goods_info商品表获取。
实体层
(1)Mapper接口
首先在购物项实体Mapper接口的NewBeeMallShoppingCartItemMapper.java中增加如下方法:
//根据userId和number字段获取固定数量的购物项列表数据
List<NewBeeMallShoppingCartItem> selectByUserId(
@Param("newBeeMallUserId") Long newBeeMallUserId
, @Param("number") int number);
(2)Mapper映射文件
映射文件NewBeeMallShoppingCartItemMapper.xml添加具体的SQL语句,代码如下:
<select id="selectByUserId" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from tb_newbee_mall_shopping_cart_item
where user_id = #{newBeeMallUserId,jdbcType=BIGINT} and is_deleted = 0
limit #{number}
</select>
业务层
在业务类中增加getMyShoppingCartItems方法,用以获取购物项列表数据,
在NewBeeMallShoppingCartService.java中增加方法,主要代码如下:
//获取我的购物车中的列表数据
List<NewBeeMallShoppingCartItemVO> getMyShoppingCartItems(Long newBeeMallUserId);
在NewBeeMallShoppingCartServiceImpl类中实现方法,主要代码如下:
@Override
public List<NewBeeMallShoppingCartItemVO> getMyShoppingCartItems(Long newBeeMallUserId) {
List<NewBeeMallShoppingCartItemVO> newBeeMallShoppingCartItemVOS = new ArrayList<>();
List<NewBeeMallShoppingCartItem> newBeeMallShoppingCartItems = newBeeMallShoppingCartItemMapper.selectByUserId(newBeeMallUserId, Constants.SHOPPING_CART_ITEM_TOTAL_NUMBER);
if (!CollectionUtils.isEmpty(newBeeMallShoppingCartItems)) {
//查询商品信息并做数据转换
List<Long> newBeeMallGoodsIds = newBeeMallShoppingCartItems.stream().map(NewBeeMallShoppingCartItem::getGoodsId).collect(Collectors.toList());
List<NewBeeMallGoods> newBeeMallGoods = newBeeMallGoodsMapper.selectByPrimaryKeys(newBeeMallGoodsIds);
Map<Long, NewBeeMallGoods> newBeeMallGoodsMap = new HashMap<>();
if (!CollectionUtils.isEmpty(newBeeMallGoods)) {
newBeeMallGoodsMap = newBeeMallGoods.stream().collect(Collectors.toMap(NewBeeMallGoods::getGoodsId, Function.identi