前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【从0做项目】Java音缘心动(6)——删除、查询音乐

【从0做项目】Java音缘心动(6)——删除、查询音乐

作者头像
三三是该溜子
发布2025-02-25 15:03:11
发布2025-02-25 15:03:11
6100
代码可运行
举报
文章被收录于专栏:该溜子的专栏该溜子的专栏
运行总次数:0
代码可运行

零:项目结果展示

项目目前已经上线

音乐播放器登录页面

​​

一:导入

在上一篇文章中,我们完成了上传音乐文件,数据库存储音乐文件信息,以及播放音乐模块

本篇文章,将一起和铁子们完成,指定音乐删除、音乐批量删除、查询音乐功能模块!深刻体会分层架构的好处!冲!塔塔开!!!

二:删除指定音乐模块

1:请求响应设计

2:Mapper层

这一层我们要做的工作主要是

①通过拿到音乐的id,到数据库中去查询音乐

②数据库中删除音乐

不多bb,直接上代码

(1)查询音乐
代码语言:javascript
代码运行次数:0
复制
    /**
     * 根据Id查询音乐
     * @param id
     * @return
     */
    Music findMusicById(int id);
(2)删除音乐
代码语言:javascript
代码运行次数:0
复制
    /**
     * 根据ID删除音乐
     * @param musicId
     * @return
     */
    int deleteMusicById(int musicId);

3:Mybatis层

(1)查询音乐
代码语言:javascript
代码运行次数:0
复制
    <select id="findMusicById" resultType="com.example.musicserver.model.Music">
        select * from music where id = #{id};
    </select>
(2)删除音乐
代码语言:javascript
代码运行次数:0
复制
    <delete id="deleteMusicById">
        delete from music where id = #{id};
    </delete>

4:Controller层

业务逻辑层去处理具体的查询逻辑和删除逻辑~~

代码语言:javascript
代码运行次数:0
复制
    /**
     * 删除单首音乐
     * @param id
     * @return
     */
    @RequestMapping("/deleteMusic")
    public ResponseBodyMessage<Boolean> deleteMusic(@RequestParam String id){
        int iid = Integer.parseInt(id);
        Music music = musicService.findMusicById(iid);
        if(music == null){
            return new ResponseBodyMessage<>(-1,"没有找到你要删除的音乐",false);
        }

        int result = musicService.deleteMusic(iid,music);
        if(result == -1){
            return new ResponseBodyMessage<>(-1,"删除数据库中的音乐失败",false);
        }else if(result == -2){
            return new ResponseBodyMessage<>(-1,"删除服务器中的音乐失败",false);
        }
        //库中和服务器中都删除成功,现在看收藏中是否含有该音乐,若有则删
        int ret = loveMusicService.deleteLoveMusicById(iid);
        if(ret == 1){
            log.info("收藏中该音乐也被删除");
        }
        return new ResponseBodyMessage<>(0,"删除服务器中的音乐成功",true);
    }

5:Service层

(1)查询逻辑
代码语言:javascript
代码运行次数:0
复制
    public Music findMusicById(int iid) {
        return musicMapper.findMusicById(iid);
    }
(2)删除逻辑

这里我们数据库中删除的只是音乐信息,我们还要删除这个电脑中(也就是服务器)保存的音乐文件,这里我们利用,在查询音乐操作中获取到的Music对象,来获取我们的音乐文件名字

我们从“=”的下一个字符截取到末尾,创建虚拟文件,传入文件路径,最后删除硬盘中存储的音乐

代码语言:javascript
代码运行次数:0
复制
    /**
     *
     * @param iid
     * @param music MusicController中已经在数据库中查到music的信息,并把music作为参数传过来了
     * @return
     */
    public int deleteMusic(int iid , Music music) {
        //1:删除数据库中的音乐
        int result = musicMapper.deleteMusicById(iid);
        if(result != 1){
            return -1;
        }
        //2:数据库中删除成功,那么服务器中的数据也要进行删除
        int index = music.getUrl().lastIndexOf("=");
        String fileName = music.getUrl().substring(index+1);//获取该音乐名称,不包含.mp3
        File file = new File(SAVE_PATH + "/" + fileName + ".mp3");
        log.info("此时的路径为:{}",file.getPath());
        //删除数据库中的音乐信息
        if(!file.delete()){
            return -2;
        }
        return 1;
    }

三:批量删除音乐

这个模块我们就需要去思考一下了,前端会返回给我们很多个音乐id,类似集合,我们后端需要对拿到的集合中所有的音乐id进行查询操作,并进行删除

1:请求响应设计

2:Controller层

这里我们使用@RequesParam来进行参数绑定,我们这个方法拿到的参数,是一个集合,其实逻辑也很简单,遍历这个集合,对拿到的每一个id,进行单曲音乐删除不就OK了~~,使用sum作为一个计数器。

代码语言:javascript
代码运行次数:0
复制
    /**
     * 批量删除音乐
     * @param idList
     * @return
     */
    @RequestMapping("/batchDeleteMusic")
    public ResponseBodyMessage<Boolean> batchDeleteMusic(@RequestParam("id") List<Integer> idList){
        int sum = 0;
        for(int i = 0 ; i < idList.size() ; i++){
            int id = idList.get(i);
            Music music = musicService.findMusicById(id);
            int result = musicService.deleteMusic(id, music);
            if(result == -1){
                return new ResponseBodyMessage<>(-1,"删除数据库中的音乐失败",false);
            }else if(result == -2){
                return new ResponseBodyMessage<>(-1,"删除服务器中的音乐失败",false);
            }
            loveMusicService.deleteLoveMusicById(music.getId());
            sum += result;
        }
        if(sum == idList.size()){
            return new ResponseBodyMessage<>(0,"批量删除成功",true);
        }else{
            return new ResponseBodyMessage<>(-1,"批量删除失败",false);
        }
    }

四:查询音乐模块

思考:我们查询音乐有哪些常见场景

1:模糊查询

比如:我很喜欢听周杰伦的歌~,那么我搜索周杰伦,音乐列表就应该给我显示所有包含周杰伦的歌曲对吧——《晴天——周杰伦》《可爱女人——周杰伦》《兰亭序——周杰伦》..........

那么这里我们后端的sql语句就应该要支持模糊查询

2:空查询

如果我们查询为空呢?那音乐列表就应该直接显示所有音乐

不多bb上图,这里使用postman给大家演示的

我们的请求和响应模块也这么设计

3:Mapper层接口设计

代码语言:javascript
代码运行次数:0
复制
    /**
     * 根据歌曲名字,查询音乐
     * @param musicName
     * @return
     */
    List<Music> findMusicByMusicName(String musicName);//模糊查询

    /**
     * 查询所有音乐
     * @return
     */
    List<Music> findAllMusic();

4:Mybatis代码实现

介绍一下这里的模糊查询

concat关键字,是sql中字符串连接操作,通常用于实现模糊查询

不懂模糊查询的童鞋到看看阿华的这篇文章

【MySQL】数据库的创建和增删查改使用操作(超详细)_数据库操作-CSDN博客

代码语言:javascript
代码运行次数:0
复制
    <select id="findMusicByMusicName" resultType="com.example.musicserver.model.Music">
        select * from music where title like concat('%',#{musicName},'%') ;
    </select>


    <select id="findAllMusic" resultType="com.example.musicserver.model.Music">
        select * from music;
    </select>

5:Controller层代码实现

代码语言:javascript
代码运行次数:0
复制
    /**
     * 找歌曲
     * @param musicName 可以传入参数
     * @return
     */
    @RequestMapping("/findMusic")
    public ResponseBodyMessage<List<Music>> findMusic(@RequestParam(required = false) String musicName){
        log.info("查询界面");
        List<Music> musicList = null;
        if(musicName == null){
            musicList = musicService.findAllMusic();
        }else {
            musicList = musicService.findMusic(musicName);
        }
        return new ResponseBodyMessage<>(0,"查询到了歌曲信息",musicList);
    }

6:Service层

代码语言:javascript
代码运行次数:0
复制
    public List<Music> findAllMusic() {
        return musicMapper.findAllMusic();
    }

    public List<Music> findMusic(String musicName) {
        return musicMapper.findMusicByMusicName(musicName);
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零:项目结果展示
  • 一:导入
  • 二:删除指定音乐模块
    • 1:请求响应设计
    • 2:Mapper层
      • (1)查询音乐
      • (2)删除音乐
    • 3:Mybatis层
      • (1)查询音乐
      • (2)删除音乐
    • 4:Controller层
    • 5:Service层
      • (1)查询逻辑
      • (2)删除逻辑
  • 三:批量删除音乐
    • 1:请求响应设计
    • 2:Controller层
  • 四:查询音乐模块
    • 1:模糊查询
    • 2:空查询
    • 3:Mapper层接口设计
    • 4:Mybatis代码实现
    • 5:Controller层代码实现
    • 6:Service层
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档