接口设计
包括添加收藏、查询收藏和移除收藏三个主要操作。
请求格式
{
"method": "post",
"url": "/lovemusic/likeMusic",
"data": {
"id": // 音乐id
}
}
响应格式
{
"status": 0,
"message": "点赞音乐成功",
"data": true
}
三、Mapper层(数据访问层)
收藏/喜欢⾳乐处理逻辑:
1、需要查询此次收藏⾳乐是否之前收藏过,收藏过则不能添加
2、没有收藏过,插⼊数据库中⼀条记录
1. LoveMusicMapper
/**
* 检查是否已经收藏过该⾳乐
* @param userId
* @param musicId
* @return
*/
Music findLoveMusicByMusicIdAndUserId(int userId, int musicId);
/**
* 点赞/收藏⾳乐
* @param userId
* @param musicId
* @return
*/
boolean insertLoveMusic(int userId, int musicId);
2. XML映射(LoveMusicMapper.xml)
<!–根据⽤⼾ID和⾳乐ID查询收藏的⾳乐 –>
<select id="findLoveMusicByMusicIdAndUserId" resultType="com.example.musicserver.model.Music">
select * from lovemusic where user_id=#{userId} and music_id=#{musicId}
</select>
<insert id="insertLoveMusic">
insert into lovemusic(user_id,music_id) values(#{userId},#{musicId})
</insert>
四、实现LoveMusicController类
1. 添加收藏(/lovemusic/likeMusic)
@RestController
@RequestMapping("/lovemusic")
public class LoveMusicController {
@Resource
private LoveMusicMapper loveMusicMapper;
@RequestMapping("/likeMusic")
public ResponseBodyMessage<Boolean> likeMusic(@RequestParam String id,
HttpServletRequest req) {
int musicId = Integer.parseInt(id);
System.out.println("likeMusic->musicId: "+musicId);
//没有session不创建
HttpSession httpSession = req.getSession(false);
if(httpSession == null ||
httpSession.getAttribute(Constant.USERINFO_SESSION_KEY) == null) {
System.out.println("没有登录!");
return new ResponseBodyMessage<>(-1,"没有登录",false);
}
User user =
(User)httpSession.getAttribute(Constant.USERINFO_SESSION_KEY);
int userId = user.getId();
System.out.println("likeMusic->userID: "+userId);
//查询当前⽤⼾是否点赞过该⾳乐
Music music =
loveMusicMapper.findLoveMusicByMusicIdAndUserId(userId,musicId);
if(music!=null) {
return new ResponseBodyMessage<>(-1,"该⽤⼾点赞过该⾳乐",false);
}else {
boolean effect = loveMusicMapper.insertLoveMusic(userId,musicId);
if(effect) {
return new ResponseBodyMessage<>(0,"点赞⾳乐成功",true);
}else {
return new ResponseBodyMessage<>(-1,"点赞⾳乐失败",false);
}
}
}
}
测试的时候注意路径名,后面一个likeMusic的M是大写的。
重复点击会显示↓
总结:模块三层架构实现:
实体层定义数据结构
Mapper层操作数据库关系
Controller层处理业务逻辑和会话验证
关键点在于通过user_id+music_id维护用户与音乐的收藏关系,并在操作前进行严格的会话验证,确保系统安全性。
代码仓库:
喜欢/收藏⾳乐模块设计 2025.7.25/音乐服务器 – Gitee.com
评论前必须登录!
注册