1,更新产品数量:
就是在购物车中,我用加减号来更新购物车中产品的数量。
先在controller中进行逻辑的设置:
@RequestMapping("update.do")
@ResponseBody
public ServerResponse<CartVo> update(HttpSession session, Integer count, Integer productId){
User user = (User)session.getAttribute(Const.CURRENT_USER);
if(user ==null){
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
}
return ......//返回这个要在service中进行设置
//也就是要调用service层中写的update方法
}
在service层中:
CartServiceImpl:
public ServerResponse<CartVo> update(Integer userId,Integer productId,Integer count){
if(productId == null || count == null){
return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
}
Cart cart = cartMapper.selectCartByUserIdProductId(userId,productId);
if(cart != null){//我们就更新其数量,更新购物车中这个产品的数量
cart.setQuantity(count);
}
cartMapper.updateByPrimaryKey(cart);//这个表示更新数据库也要更新了
CartVo cartVo = this.getCartVoLimit();
return ServerResponse.createBySuccess(cartVo);
}
然后将其这个update方法声明到接口中:
ServerResponse<CartVo> update(Integer userId,Integer productId,Integer count);
然后,在controller中就可以调用了:
也就是return iCartService.update(user.getId(),productId,count);
@RequestMapping("update.do")
@ResponseBody
public ServerResponse<CartVo> update(HttpSession session, Integer count, Integer productId){
User user = (User)session.getAttribute(Const.CURRENT_USER);
if(user ==null){
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
}
return iCartService.update(user.getId(),productId,count);
}
这个更新购物车中数量的方法就写完了。(这个主要得以于在add方法中写的那个可以共用的方法:getCartVoLimit。则在以后的更新,删除,全选,反全选等逻辑中都是可以调用这个共用的方法的。也就达到了简化代码和重用代码的作用)
2,删除产品:
有了前面写的add方法,则这个delete方法也是比较简单了:
只不过删除操作,是不需要数量这个参数了。并且可能一次性删除多个,或者全部删除,(所以这里面需要进行设置一个字符串,然后用逗号来分割其id。因为可能删除多个id(多个商品))。
(String productIds这里出入的参数是productIds,这个productIds可能包括多个productId)
@RequestMapping("delete_product.do")
@ResponseBody
public ServerResponse<CartVo> deleteProduct(HttpSession session,String productIds){
User user = (User)session.getAttribute(Const.CURRENT_USER);
if(user ==null){
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
}
return ....//这个返回的要在service中进行设置
}
下面回到service层:
CartServiceImpl:
我们这里用的split方法:(这样呢,就可以把这个productIds分成多个productId,来进行操作。如果不这样的话,我们就需要把productIds转成数组,然后再遍历数组添加到集合当中)
List productList = Splitter.on(",").splitToList(productIds);
public ServerResponse<CartVo> deleteProduct(Integer userId,String productIds){
List<String> productList = Splitter.on(",").splitToList(productIds);//用,分割,并且把结果转成集合的形式
if(CollectionUtils.isEmpty(productList)){//如果是空的话,就返回参数错误
return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
}
//否则,就是可以删除购物车中产品的数量了
cartMapper.......//这个也就是一个删除操作,用sql语句,那么需要去mapper和xml中去设置
}
下面到mapper中去设置:
int deleteByUserIdProductIds(@Param("userId") Integer userId,@Param("productIdList")List<String> productIdList);
然后去xml中写sql语句:
<delete id="deleteByUserIdProductIds" parameterType="map">
delete from mmall_cart
where user_id = #{userId}
<if test="productIdList != null">
and product_id in
<foreach collection="productIdList" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</delete>
写好sql以后,我们就可以回到service中进行调用了:
CartServiceImpl:
cartMapper.deleteByUserIdProductIds(userId,productList);
也就是:
public ServerResponse<CartVo> deleteProduct(Integer userId,String productIds){
List<String> productList = Splitter.on(",").splitToList(productIds);
if(CollectionUtils.isEmpty(productList)){
return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
}
cartMapper.deleteByUserIdProductIds(userId,productList);
CartVo cartVo = this.getCartVoLimit();
return ServerResponse.createBySuccess(cartVo);
}
然后把这个方法声明到接口中,以备调用:
ServerResponse<CartVo> deleteProduct(Integer userId,String productIds);
然后就可以在controller中进行调用了:
也就是:
return iCartService.deleteProduct(user.getId(),productIds);
@RequestMapping("delete_product.do")
@ResponseBody
public ServerResponse<CartVo> deleteProduct(HttpSession session,String productIds){
User user = (User)session.getAttribute(Const.CURRENT_USER);
if(user ==null){
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
}
return iCartService.deleteProduct(user.getId(),productIds);
}
这样呢,在购物车中删除商品的操作就写完了。
(写的比较乱,以后有时间了在进行整理)