第1关:修改购物车中的商品
任务描述
本关任务:实现购物车中商品的修改功能。
相关知识
为了完成本关任务,你需要掌握:
- 修改购物车中的商品;
- 功能实现。
修改购物车中的商品
购物车页面如下图:
用户可在购物车页面对想要购买的商品进行数量的修改,如在右边商品列表中点击 “-”号,对应的商品数量减一,如果商品数量为 “0”,那么就删除该商品列表;点击 “+” 号那么对应商品的数量就加一。
功能实现
- dao 层代码对购物车表商品数量修改:
package com.www.dao;
import com.www.entity.ShoppingCart;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
@Repository
public interface ShoppingCartDao {
//修改数据库中的商品数量
@Update("update shoppingcart set num=#{num} where user_id=#{user_id} and product_id=#{product_id}")
int updateShoppingCart(int user_id,int product_id,int num);
//删除数据库中的商品
@Delete("delete from shoppingcart where user_id=#{user_id} and product_id=#{product_id}")
int deleteShoppingCart(int user_id,int product_id);
}
- service 层代码判断前端参数并调用 dao 层方法: service 接口:
package com.www.service;
import com.www.entity.ShoppingCart;
import org.springframework.stereotype.Component;
@Component
public interface ShoppingCartService {
//定义修改购物车商品 service 接口
boolean updateShoppingCart(int user_id,int product_id,int num);
//定义删除购物车商品 service 接口
boolean deleteShoppingCart(Integer user_id,Integer product_id);
}
package com.www.service.impl;
import com.www.dao.ShoppingCartDao;
import com.www.entity.ShoppingCart;
import com.www.service.ShoppingCartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("shoppingCartService")
public class ShoppingCartServiceImpl implements ShoppingCartService {
@Autowired
private ShoppingCartDao shoppingCartDao;
@Override
public boolean updateShoppingCart(int user_id, int product_id, int num) {
//row 是执行条数
int row=shoppingCartDao.updateShoppingCart(user_id,product_id,num);
//row 为1,就是执行成功了,就返回 true ,否则返回 false
if (row==1){
return true;
}else {
return false;
}
}
@Override
public boolean deleteShoppingCart(Integer user_id, Integer product_id) {
//row 是执行条数
int row=shoppingCartDao.deleteShoppingCart(user_id,product_id);
//row 为1,就是执行成功了,就返回 true ,否则返回 false
if (row==1){
return true;
}else {
return false;
}
}
}
- controller 层判断执行结果:
package com.www.controller;
import com.www.entity.ShoppingCart;
import com.www.service.ShoppingCartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping(value = "/shoppingCart")
public class ShoppingCartController {
@Autowired
private ShoppingCartService shoppingCartService;
@RequestMapping("/updateShoppingCart")
public Map updateShoppingCart(@RequestBody Map<String,Integer> paramMap){
HashMap<String, String> map = new HashMap<>();
//获取参数
int user_id = paramMap.get("user_id");
int product_id = paramMap.get("product_id");
int num = paramMap.get("num");
//如果 num 修改为0,就是删除该商品
if (num==0){
boolean is=shoppingCartService.deleteShoppingCart(user_id,product_id);
//判断是否删除成功
if (is){
map.put("msg","商品已删除");
}else {
map.put("msg","商品删除失败");
}
return map;
}
//num 不为0,就是修改商品
boolean is=shoppingCartService.updateShoppingCart(user_id,product_id,num);
//判断是否修改成功
if (is){
map.put("msg","修改购物车数量成功");
}else {
map.put("msg","修改购物车数量失败");
}
return map;
}
}
- 数据库结构如下: 购物车表:
字段名称 类型 备注 id
int(11) NOT NULL AUTO_INCREMENT '购物车id' user_id
int(11) NOT NULL '用户id' product_id
int(11) NOT NULL '商品id' num
int(11) NOT NULL '商品数量' 编程要求
在 ShoppingCartDao.java、ShoppingCartService.java、ShoppingCartServiceImpl.java、ShoppingCartController.java 文件里 Begin-End 处根据提示补充代码。
测试说明
平台会对你编写的代码进行测试:发送请求检验返回的结果集是否正确。
测试输入:
{
"user_id":1018,
"product_id":1,
"num":1
}
预期输出: 修改购物车数量成功
开始你的任务吧,祝你成功!
ShoppingCartDao.java
package com.www.dao;
import com.www.entity.ShoppingCart;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
@Repository
public interface ShoppingCartDao {
//修改数据库中的商品数量
/******************************Begin******************************/
@Update("update shoppingcart set num=#{num} where user_id=#{user_id} and product_id=#{product_id}")
int updateShoppingCart(int user_id,int product_id,int num);
/******************************End******************************/
//删除数据库中的商品
/******************************Begin******************************/
@Delete("delete from shoppingcart where user_id=#{user_id} and product_id=#{product_id}")
int deleteShoppingCart(int user_id,int product_id);
/******************************End******************************/
}
ShoppingCartService.java
package com.www.service;
import com.www.entity.ShoppingCart;
import org.springframework.stereotype.Component;
@Component
public interface ShoppingCartService {
//定义修改购物车商品 service 接口
/******************************Begin******************************/
boolean updateShoppingCart(int user_id,int product_id,int num);
/******************************End******************************/
//定义删除购物车商品 service 接口
/******************************Begin******************************/
boolean deleteShoppingCart(Integer user_id,Integer product_id);
/******************************End******************************/
}
ShoppingCartServiceImpl.java
package com.www.service.impl;
import com.www.dao.ShoppingCartDao;
import com.www.entity.ShoppingCart;
import com.www.service.ShoppingCartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("shoppingCartService")
public class ShoppingCartServiceImpl implements ShoppingCartService {
@Autowired
private ShoppingCartDao shoppingCartDao;
/*调用 dao 层修改购物车商品数量方法*/
/******************************Begin******************************/
@Override
public boolean updateShoppingCart(int user_id, int product_id, int num) {
//row 是执行条数
int row;
//row 为1,就是执行成功了,就返回 true ,否则返回 false
row=shoppingCartDao.updateShoppingCart(user_id,product_id,num);
//row 为1,就是执行成功了,就返回 true ,否则返回 false
if (row==1){
return true;
}else {
return false;
}
}
/******************************End******************************/
/*调用 dao 层删除购物车商品方法*/
/******************************Begin******************************/
@Override
public boolean deleteShoppingCart(Integer user_id, Integer product_id) {
//row 是执行条数
int row;
//row 为1,就是执行成功了,就返回 true ,否则返回 false
row=shoppingCartDao.deleteShoppingCart(user_id,product_id);
//row 为1,就是执行成功了,就返回 true ,否则返回 false
if (row==1){
return true;
}else {
return false;
}
}
/******************************End******************************/
}
ShoppingCartController.java
package com.www.controller;
import com.www.entity.ShoppingCart;
import com.www.service.ShoppingCartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping(value = "/shoppingCart")
public class ShoppingCartController {
@Autowired
private ShoppingCartService shoppingCartService;
/*判断商品数量 num ,如果 num 大于 0 就修改商品数量为 num ,否则就删除该商品*/
/***********************************Begin***********************************/
@RequestMapping("/updateShoppingCart")
public Map updateShoppingCart(@RequestBody Map<String,Integer> paramMap){
HashMap<String, String> map = new HashMap<>();
//获取参数
int user_id = paramMap.get("user_id");
int product_id = paramMap.get("product_id");
int num = paramMap.get("num");
//如果 num 修改为0,就是删除该商品
if (num==0){
boolean is=shoppingCartService.deleteShoppingCart(user_id,product_id);
//判断是否删除成功
if (is){
map.put("msg","商品已删除");
}else {
map.put("msg","商品删除失败");
}
return map;
}
//num 不为0,就是修改商品
boolean is=shoppingCartService.updateShoppingCart(user_id,product_id,num);
//判断是否修改成功
if (is){
map.put("msg","修改购物车数量成功");
}else {
map.put("msg","修改购物车数量失败");
}
return map;
}
/***********************************End***********************************/
}
ShoppingCart.java
package com.www.entity;
import lombok.Data;
import java.io.Serializable;
@Data
public class ShoppingCart implements Serializable {
private int id;
private int user_id;
private int product_id;
private int num;
}
Product.java
package com.www.entity;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class Product implements Serializable {
private int product_id;
private String product_name;
private int category_id;
private String product_title;
private String product_intro;
private String product_picture;
private BigDecimal product_price; //原价
private BigDecimal product_selling_price; //售价
private int product_num;
private int product_sales;
private int status;
}
加油哦,同学们!