Spring Boot音乐服务器项目-喜欢/收藏音乐模块

发布于:2025-07-31 ⋅ 阅读:(21) ⋅ 点赞:(0)

接口设计

包括添加收藏查询收藏移除收藏三个主要操作。

请求格式
{
  "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是大写的。

重复点击会显示↓


总结:模块三层架构实现:
  1. 实体层定义数据结构

  2. Mapper层操作数据库关系

  3. Controller层处理业务逻辑和会话验证

关键点在于通过user_id+music_id维护用户与音乐的收藏关系,并在操作前进行严格的会话验证,确保系统安全性。

代码仓库:

喜欢/收藏⾳乐模块设计 2025.7.25/音乐服务器 - Gitee.com


网站公告

今日签到

点亮在社区的每一天
去签到