【从0做项目】Java音缘心动(7)——收藏音乐

 

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:导入

二:添加音乐到喜欢的列表

1:请求响应模块设计

2:Mapper层接口设计

3:Mybatis层

4:Controller层

5:Service层

三:查询喜欢音乐模块

1:Mapper层

2:Mybatis

3:Controller

4:Service

四: 移除收藏音乐模块

1:请求响应设计

2:Mapper层

3:MyBatis

4:Controller

5:Service


零:项目结果展示

项目目前已经上线 

音乐播放器登录页面铁子们可以后台私信获取管理员用户和密码

​​

一:导入

上一篇文章,我们完成了删除音乐,查询音乐模块,本篇文章我们肝,收藏页面——收藏音乐功能,取消收藏,收藏页面的删除音乐

二:添加音乐到喜欢的列表

1:请求响应模块设计

2:Mapper层接口设计

    /**
     * 检查是否已经收藏过该音乐
     * @param userId
     * @param musicId
     * @return
     */
    Music findLoveMusicByMusicIdAndUserId(int musicId,int userId);

    /**
     * 点赞/收藏音乐
     * @param userId
     * @param musicId
     * @return
     */
    boolean insertLoveMusic(int userId , int musicId);

3:Mybatis层

    <!--根据⽤⼾ID和⾳乐ID查询收藏的⾳乐 -->
    <select id="findLoveMusicByMusicIdAndUserId" resultType="com.example.musicserver.model.Music">
        select * from lovemusic where music_id = #{musicId} and user_id = #{userId};
    </select>

    <insert id="insertLoveMusic">
        insert into lovemusic (user_id , music_id) values (#{userId} , #{musicId});
    </insert>

4:Controller层

注意Service层的依赖的注入哦

这里简单讲解一下代码逻辑,参数绑定id,前端传过是字符串,我们解析为int类型 ,

第一步:判断一下当前是否已经登录

第二步:拿到当前用户id,和用户想要收藏的音乐id,去数据库收藏表中找是否已有,有的话说明已经收藏过了

第三步:没收藏过,就把当前音乐插入,数据库收藏table中,记录一下信息

    /**
     * 收藏音乐
     * @param id
     * @param request
     * @return
     */
    @RequestMapping("/likeMusic")
    public ResponseBodyMessage<Boolean> likeMusic(@RequestParam String id , HttpServletRequest request){
        int musicId = Integer.parseInt(id);
        log.info("喜欢的音乐的id是{}",musicId);
        HttpSession httpSession = request.getSession(false);//没有session不创建
        if(httpSession == null ||
                httpSession.getAttribute(Constants.USERINFO_SESSION_KEY) == null){
            log.info("没有登陆");
            return new ResponseBodyMessage<>(-1,"没有登录",false);
        }
        User user = (User)httpSession.getAttribute(Constants.USERINFO_SESSION_KEY);//获取用户信息
        int userId = user.getId();
        log.info("当前登录用户的id是{}",userId);
        //查询当前⽤⼾是否点赞过该⾳乐
        Music music = loveMusicService.findLoveMusicByMusicIdAndUserId(userId, musicId);
        if(music != null){
            return new ResponseBodyMessage<>(-1,"该用户已经收藏过该音乐了",false);
        }
        boolean result = loveMusicService.insertLoveMusic(userId,musicId);
        if(result){
            return new ResponseBodyMessage<>(0,"该音乐收藏成功",true);
        }
        return new ResponseBodyMessage<>(-1,"该音乐收藏失败",false);
    }

上述的代码就不过多bb了,比较简单

5:Service层

我们主要实现这两个方法

    public List<Music> findAllLoveMusicByUserId(int userId) {
        return loveMusicMapper.findAllLoveMusicByUserId(userId);
    }
    public List<Music> findLoveMusicByKeyAndUserId(String musicName, int userId) {
        return loveMusicMapper.findLoveMusicByKeyAndUserId(musicName,userId);
    }

三:查询喜欢音乐模块

这里的查询逻辑与上一篇文章逻辑一样,就不过多赘述了

1:Mapper层

    /**
     * 如果没有传入具体的歌曲名,显示当前用户收藏的所有音乐
     * @param userId
     * @return
     */
    List<Music> findAllLoveMusicByUserId(int userId);

    /**
     * 根据某个用户id和歌曲名称查询,某个用户收藏的音乐
     * @param musicName
     * @param userId
     * @return
     */
    List<Music> findLoveMusicByKeyAndUserId(String musicName , int userId);

2:Mybatis

    <select id="findAllLoveMusicByUserId" resultType="com.example.musicserver.model.Music">
        select m.* from lovemusic lm , music m where lm.music_id = m.id and lm.user_id = #{userId};
    </select>

    <select id="findLoveMusicByKeyAndUserId" resultType="com.example.musicserver.model.Music">
        select m.* from lovemusic lm , music m
                   where lm.music_id = m.id and lm.user_id = #{userId} and title like concat('%',#{musicName},'%')
    </select>

3:Controller

注意的一点:这里我们返回的是一个集合,里面有很多Music

    @RequestMapping("/findLoveMusic")
    public ResponseBodyMessage<List<Music>> findLoveMusic(@RequestParam(required = false) String musicName
            , HttpServletRequest request){
        HttpSession httpSession = request.getSession(false);
        if(httpSession == null
                || httpSession.getAttribute(Constants.USERINFO_SESSION_KEY)== null){
            log.info("没有登陆");
            return new ResponseBodyMessage<>(-1,"没有登录",null);
        }

        User user = (User)httpSession.getAttribute(Constants.USERINFO_SESSION_KEY);
        int userId = user.getId();
        List<Music> musics = new ArrayList<>();
        if(musicName == null || musicName == ""){
            musics = loveMusicService.findAllLoveMusicByUserId(userId);
        }else{
            musics = loveMusicService.findLoveMusicByKeyAndUserId(musicName, userId);//歌曲名不为null就模糊查询
        }
        return new ResponseBodyMessage<>(0,"查询到了所有的收藏音乐",musics);
    }

4:Service

    public List<Music> findAllLoveMusicByUserId(int userId) {
        return loveMusicMapper.findAllLoveMusicByUserId(userId);
    }
    public List<Music> findLoveMusicByKeyAndUserId(String musicName, int userId) {
        return loveMusicMapper.findLoveMusicByKeyAndUserId(musicName,userId);
    }

四: 移除收藏音乐模块

1:请求响应设计

2:Mapper层

    /**
     * 移除收藏的音乐,但不是删除音乐本身,只是从数据库中删除了记录
     * @param userId
     * @param musicId
     * @return
     */
    int deleteLoveMusic(int userId , int musicId);

    /**
     * 当删除库中的⾳乐的时候,同步删除lovemusic中的数据
     * @param musicId
     * @return
     */
    int deleteLoveMusicById(int musicId);

3:MyBatis

    <delete id="deleteLoveMusic">
        delete from lovemusic where user_id = #{userId} and music_id = #{musicId}
    </delete>

    <insert id="deleteLoveMusicById">
        delete from lovemusic where music_id = #{musicId}
    </insert>

4:Controller

    @RequestMapping("/deleteLoveMusic")
    public ResponseBodyMessage<Boolean> deleteLoveMusic(@RequestParam String id , HttpServletRequest request){
        int musicId = Integer.parseInt(id);
        HttpSession httpSession = request.getSession(false);
        if(httpSession == null
                || httpSession.getAttribute(Constants.USERINFO_SESSION_KEY)== null){
            log.info("没有登陆");
            return new ResponseBodyMessage<>(-1,"没有登录",false);
        }
        User user = (User)httpSession.getAttribute(Constants.USERINFO_SESSION_KEY);
        int userId = user.getId();
        int ret = loveMusicService.deleteLoveMusic(userId,musicId);
        if(ret == 1){
            return new ResponseBodyMessage<>(0,"取消收藏成功",true);
        }else{
            return new ResponseBodyMessage<>(-1,"取消收藏失败",false);
        }
    }

5:Service

注意:在收藏页面删除的音乐,那么音乐主页中该音乐也需要同步删除

    public int deleteLoveMusic(int userId, int musicId) {
        return loveMusicMapper.deleteLoveMusic(userId,musicId);
    }

    public Integer deleteLoveMusicById(int iid) {
        return loveMusicMapper.deleteLoveMusicById(iid);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值