Spring Boot音乐服务器项目如何删除音乐模块

 更新时间:2025年08月04日 10:27:35   作者:無限進步island  
本文详解Java音乐播放服务器删除功能,分为单删与批删模块,基于三层架构(实体层、Mapper层、Controller层)实现,涵盖文件路径处理、事务操作、安全校验等关键点,确保数据库与物理文件同步删除,感兴趣的朋友一起看看吧

Java音乐播放服务器:删除音乐功能设计与实现详解

在音乐播放服务器中,删除音乐功能分为单个删除批量删除两个核心模块。

接口设计预期设计:

请求: {post, /music/delete, id } 

响应: {"status":0,"message":"删除成功!", "data":true }

我们已经在前面定义了Music的实体层(Model)

接下来我们就定义出两个接口

一、Mapper层(数据访问层)

1. 接口声明(MusicMapper.java)<查到了才能删,查是删的基础>

    /**
     根据ID删除⾳乐
     @param musicId
     @return
     */
    int deleteMusicById(int musicId);
    /**
     根据ID查询⾳乐
     @param id
     @return
     */
    Music findMusicById(int id);

2. XML映射(MusicMapper.xml)

    </insert>
    <delete id="deleteMusicById" parameterType="java.lang.Integer">
        delete from music where id = #{id}
    </delete>
    <select id="findMusicById" resultType="com.example.musicplayer.model.Music">
        select * from music where id = #{id}
    </select>

二、Controller层(API设计)

1. 单个音乐删除(/music/delete

@RequestMapping("/delete")
    public ResponseBodyMessage<Boolean> deleteMusicById(@RequestParam String id){
        int musicId = Integer.parseInt(id);
        Music music = musicMapper.findMusicById(musicId);
        if (music == null)
            return new ResponseBodyMessage<>(-1,"没有你所需要的音乐",false);
            int ret = musicMapper.deleteMusicById(musicId);
            if (ret == 1) {
                int index = music.getUrl().lastIndexOf("=");
                String filename = music.getUrl().substring(index + 1);
                File file = new File(SAVE_PATH + "/" + filename + ".mp3");
                System.out.println("路径为:" + file.getPath());
                if (file.delete()) {
                    return new ResponseBodyMessage<>(0, "删除音乐成功", true);
                } else {
                    return new ResponseBodyMessage<>(1, "删除音乐失败", false);
                }
            }else {
                return new ResponseBodyMessage<>(-1,"在数据库中删除音乐失败",false);
            }
        }

在我习惯看来,我是不太习惯在controller层写下这么多逻辑,我认为这里的绝大部分代码应该是放在service层去实现的,但是这个项目体量接口比较少,所以我就都放在controller层一并实现了。

写完后我们跑起来运行一遍 

2. 批量删除(/music/deleteSel

<实体层、mapper层对批量处理都是适用的,所以只需要在这里处理一个批量逻辑即可>

/**
     根据id数组批量删除⾳乐
     @param id
     @return
     */
    @RequestMapping("/deleteSel")
    public ResponseBodyMessage<Boolean> deleteSelMusic(@RequestParam("id[]")
                                                               List<Integer> id) {
        int sum = 0;
        for (int i = 0; i < id.size(); i++) {
            Music music = musicMapper.findMusicById(id.get(i));
            int ret = musicMapper.deleteMusicById(id.get(i));
            if(ret == 1) {
                //数据库删除成功,那么服务器上的数据也需要发⽣改变
                //删除服务器⽬录下的对应的⽂件
                int index = music.getUrl().lastIndexOf("=");
                String filename = music.getUrl().substring(index+1);
                File file = new File(SAVE_PATH+"\\"+filename+".mp3");
                if(file.delete()) {
                    sum += ret;
                }else {
                    System.out.println("删除失败!");
                    return new ResponseBodyMessage<>(-1,"删除服务器上的⾳乐失败",false);
                }
            }else {
                System.out.println("删除失败!");
                return new ResponseBodyMessage<>(-1,"删除数据上的⾳乐信息失败",false);
            }
        }
        if(sum == id.size()) {
            System.out.println("删除成功!");
            return new ResponseBodyMessage<>(0,"批量删除成功",true);
        }else {
            System.out.println("删除失败!");
            return new ResponseBodyMessage<>(0,"批量删除成功",false);
        }
    }

批量删除实际也就是将id变成一个id[]的一维数组,在删除时遍历到for循环中,根据给过来的参数遍历删除

三、关键技术解析

  1. 文件路径处理
    • 通过@Value("${music.local.path}")读取配置文件中的存储路径
    • 从URL参数解析真实文件名(如/music/get?path=song → song.mp3
  2. 事务性操作
    • 数据库删除 → 文件删除原子操作
    • 任一环节失败立即返回错误,避免脏数据
  3. 安全校验
    • Session验证确保用户登录状态
    • 前置查询防止非法删除
  4. 批量删除优化
    • 循环处理每个ID而非单条SQL
    • 独立处理每条记录保证部分成功时的可控性

总结:删除功能通过三层架构实现:

  • 实体层映射数据结构
  • Mapper层操作数据库
  • Controller层协调业务逻辑与文件操作

关键点在于保持数据库记录与物理文件的同步,并通过严格校验保证系统安全性。

代码仓库:删除音乐接口开发 7.22 ·/音乐服务器 - Gitee.com 

到此这篇关于Spring Boot音乐服务器项目如何删除音乐模块的文章就介绍到这了,更多相关Spring Boot删除音乐模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot监控所有线程池的四种解决方案及代码案例

    SpringBoot监控所有线程池的四种解决方案及代码案例

    这篇文章介绍了四种监控Spring Boot中所有线程池的解决方案,并提供了代码案例,推荐使用自动发现机制来监控所有线程池,需要的朋友可以参考下
    2025-12-12
  • Spring配置使用之Bean生命周期详解

    Spring配置使用之Bean生命周期详解

    这篇文章主要介绍了Spring配置使用之Bean生命周期详解,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • SpringBoot服务上实现接口限流的方法

    SpringBoot服务上实现接口限流的方法

    这篇文章主要介绍了SpringBoot服务上实现接口限流的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 详解Java数据库连接JDBC基础知识(操作数据库:增删改查)

    详解Java数据库连接JDBC基础知识(操作数据库:增删改查)

    这篇文章主要介绍了详解Java数据库连接JDBC基础知识(操作数据库:增删改查),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Eclipse配置springIDE插件的方法步骤

    Eclipse配置springIDE插件的方法步骤

    本篇文章主要介绍了Eclipse配置springIDE插件的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Windows上安装并使用SDKMAN详细教程(JDK多版本管理)

    Windows上安装并使用SDKMAN详细教程(JDK多版本管理)

    在Linux和macOS上,开发者可以轻松使用SDKMAN来管理多个JDK版本,但Windows原生并不直接支持SDKMAN,这篇文章主要介绍了Windows上安装并使用SDKMAN管理JDK多版本管理的相关资料,需要的朋友可以参考下
    2026-05-05
  • Spring 异常单元测试的解决

    Spring 异常单元测试的解决

    这篇文章主要介绍了Spring 异常单元测试的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Dubbo RPC接口的参数校验过程

    Dubbo RPC接口的参数校验过程

    文章介绍了在服务A调用服务B时,如何通过添加validation="true"实现参数校验,包括在pom文件、配置文件或注解@Reference中设置,并说明服务B的接口DTO可嵌套校验,需使用@Valid和@Validated
    2025-10-10
  • Java实现两人五子棋游戏(六) 行棋方变换

    Java实现两人五子棋游戏(六) 行棋方变换

    这篇文章主要为大家详细介绍了Java实现一个简单的两人五子棋游戏,行棋方变换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Spring中的ConversionService源码解析

    Spring中的ConversionService源码解析

    这篇文章主要介绍了Spring中的ConversionService源码解析,ConversionService是类型转换服务的接口,从名字就可以看出ConverterRegistry是要实现转换器注册表的接口,添加和移除Converter和GenericConverter,需要的朋友可以参考下
    2023-11-11

最新评论