第1关:取消收藏
任务描述
本关任务:实现删除用户收藏的商品功能。
相关知识
为了完成本关任务,你需要掌握:
- 删除用户收藏的商品;
- 功能实现。
删除用户收藏的商品
如下图是商品收藏页面的展示:如果我们不喜欢该商品那么就可以删除该商品收藏。
一般流程为:点击删除收藏—>前端携带用户 id 与商品 id 请求服务器—>服务器判断用户是否收藏该商品—>删除数据库收藏表该条数据。
功能实现
-
dao 层写好查询用户是否收藏了该商品和删除收藏表数据的方法。 CollectDao:
//根据用户id,商品id 查询收藏表是否有数据
//根据用户id,商品id 查询收藏表是否有数据
@Select("select count(1) from collect where user_id=#{user_id} and product_id=#{product_id}")
int findCollect(int user_id,int product_id);
//根据 user_id、product_id 删除 collect 表中的信息
@Delete("delete from collect where user_id=#{user_id} and product_id=#{product_id}")
void deleteCollect(int user_id, int product_id);
-
service 层定义接口且 Impl 实现类调用 dao 接口方法。 CollectService:
//定义 service 接口,查询该收藏是否存在
int findCollect(int user_id,int product_id);
//定义 service 接口,删除收藏
void deleteCollect(int user_id, int product_id);
CollectServiceImpl:
/**
* 查询收藏是否存在
* @param user_id 用户id
* @param product_id 商品id
* @return
*/
@Override
public int findCollect(int user_id, int product_id) {
return collectDao.findCollect(user_id,product_id);
}
/**
* 删除收藏
* @param user_id
* @param product_id
*/
@Override
public void deleteCollect(int user_id, int product_id) {
collectDao.deleteCollect(user_id,product_id);
}
-
controller 层:判断用户是否收藏商品,收藏了就调用 service 层方法删除该收藏,没收藏就直接返回结果集。
/**
* 删除收藏
* @param paramMap
* @return
*/
@RequestMapping(value = "/deleteCollect")
public Map deleteCollect(@RequestBody Map<String,Integer> paramMap){
//接收参数用户id: user_id
Integer user_id = paramMap.get("user_id");
//接收参数商品id: product_id
Integer product_id = paramMap.get("product_id");
//定义结果集 map 集合
HashMap<String, String> map = new HashMap<>();
//调用 service 方法,查询该用户是否收藏该商品
if(collectService.findCollect(user_id,product_id)>0){
//调用 service 层删除收藏方法,收藏了该商品就删除该收藏
collectService.deleteCollect(user_id,product_id);
//删除收藏后返回 map 集合: “code”:"001","msg":"取消收藏成功"
map.put("code","001");
map.put("msg","取消收藏成功");
}else {
//返回 map 集合: “code”:"003","msg":"取消收藏失败"
map.put("code","003");
map.put("msg","取消收藏失败");
}
return map;
}
-
数据库如下: 商品表:
字段名称 类型 备注 product_id
int(11) NOT NULL AUTO_INCREMENT '商品id' product_name
char(100) NOT NULL '商品名' category_id
int(11) NOT NULL '类型id' product_title
char(30) NOT NULL '商品标题' product_intro
text NOT NULL '商品描述' product_picture
char(200) DEFAULT NULL '商品图片' product_price
decimal(10,2) NOT NULL '商品价格' product_selling_price
decimal(10,2) NOT NULL '商品售价' product_num
int(11) NOT NULL '商品存量' product_sales
int(11) NOT NULL '商品销售数量' status
int(11) DEFAULT NULL '商品状态'
收藏表:
字段名称 | 类型 | 备注 | |
---|---|---|---|
id | int(11) | NOT NULL AUTO_INCREMENT | '收藏表主键id' |
user_id | int(11) | NOT NULL | '用户id' |
product_id | int(11) | NOT NULL | '商品id' |
collect_time | datetime | NOT NULL | '收藏时间' |
编程要求
在右侧 CollectDao.java、CollectService.java、CollectServiceImpl.ava、CollectController.java 文件里 Begin-End 处根据提示补充代码。
测试说明
平台会对你编写的代码进行测试:发送请求检验结果集是否正确。
测试输入:
{
"user_id":"1018",
"product_id":"1"
}
预期输出:
{"msg":"取消收藏成功","code":"001"}
开始你的任务吧,祝你成功!
CollectDao.java
package com.www.dao;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
@Repository
public interface CollectDao {
//根据用户id,商品id 查询收藏表是否有数据
/**********************Begin**********************/
@Select("select count(1) from collect where user_id=#{user_id} and product_id=#{product_id}")
int findCollect(int user_id,int product_id);
/**********************End**********************/
//根据 user_id、product_id 删除 collect 表中的信息
/**********************Begin**********************/
@Delete("delete from collect where user_id=#{user_id} and product_id=#{product_id}")
void deleteCollect(int user_id, int product_id);
/**********************End**********************/
}
CollectService.java
package com.www.service;
import org.springframework.stereotype.Component;
@Component
public interface CollectService {
//定义 service 接口,查询该收藏是否存在
/**********************Begin**********************/
int findCollect(int user_id,int product_id);
/**********************End**********************/
//定义 service 接口,删除收藏
/**********************Begin**********************/
void deleteCollect(int user_id, int product_id);
/**********************End**********************/
}
CollectServiceImpl.java
package com.www.service.impl;
import com.www.dao.CollectDao;
import com.www.service.CollectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("collectService")
public class CollectServiceImpl implements CollectService {
@Autowired
private CollectDao collectDao;
/**
* 查询收藏是否存在
* @param user_id 用户id
* @param product_id 商品id
* @return
*/
@Override
public int findCollect(int user_id, int product_id) {
//调用 dao 层方法,查询用户是否收藏该条商品
/**********************Begin**********************/
return collectDao.findCollect(user_id,product_id);
/**********************End**********************/
}
/**
* 删除收藏
* @param user_id
* @param product_id
*/
@Override
public void deleteCollect(int user_id, int product_id) {
//调用 dao 层方法,删除用户收藏
/**********************Begin**********************/
collectDao.deleteCollect(user_id,product_id);
/**********************End**********************/
}
}
CollectController.java
package com.www.controller;
import com.www.service.CollectService;
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 = "/collect")
public class CollectController {
@Autowired
private CollectService collectService;
/**
* 删除收藏
* @param paramMap
* @return
*/
@RequestMapping(value = "/deleteCollect")
public Map deleteCollect(@RequestBody Map<String,Integer> paramMap){
/*************************Begin*************************/
//接收参数用户id: user_id
Integer user_id = paramMap.get("user_id");
//接收参数商品id: product_id
Integer product_id = paramMap.get("product_id");
//定义结果集 map 集合
HashMap<String, String> map = new HashMap<>();
//调用 service 方法,查询该用户是否收藏该商品
if(collectService.findCollect(user_id,product_id)>0){
//调用 service 层删除收藏方法,收藏了该商品就删除该收藏
collectService.deleteCollect(user_id,product_id);
//删除收藏后返回 map 集合: “code”:"001","msg":"取消收藏成功"
map.put("code","001");
map.put("msg","取消收藏成功");
}else {
//返回 map 集合: “code”:"003","msg":"取消收藏失败"
map.put("code","003");
map.put("msg","取消收藏失败");
}
return map;
/*************************End*************************/
}
}
Collect.java
package com.www.entity;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class Collect implements Serializable {
private int id;
private int user_id;
private int product_id;
private String collect_time;
private String product_picture;
private String product_name;
private String product_title;
private BigDecimal product_selling_price;
private BigDecimal product_price;
}
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;
}
加油哦,同学们!