当前位置: 首页 > news >正文

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

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

    • 独立处理每条记录保证部分成功时的可控性


 

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

  1. 实体层映射数据结构

  2. Mapper层操作数据库

  3. Controller层协调业务逻辑与文件操作
    关键点在于保持数据库记录与物理文件的同步,并通过严格校验保证系统安全性。

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

http://www.dtcms.com/a/301711.html

相关文章:

  • Telerik 2025 Q2 Crack,Telerik Report Serve完整的解决方案
  • 腾讯云AI代码助手CodeBuddy开发指导
  • java小白闯关记第一天(两个数相加)
  • 第七章 状态管理
  • (LeetCode 每日一题) 2210. 统计数组中峰和谷的数量 (数组)
  • 通过阿里云服务器使用NPS实现外网访问本机服务
  • vulkan从小白到专家——YUV处理
  • 动态规划 (Dynamic Programming) 算法概念-JS示例
  • Qt写游戏脚本/辅助(仅供参考)
  • @RefreshScope 核心原理深度解析:Spring Boot 的动态魔法
  • C++:模拟实现shared_ptr
  • day69—动态规划—爬楼梯(LeetCode-70)
  • LeetCode 刷题【16. 最接近的三数之和、17. 电话号码的字母组合】
  • 黑马程序员C++核心编程笔记--类和对象--运算符重载
  • 机器学习—线性回归
  • 深入解析MySQL索引页结构与B+Tree实现原理
  • ubuntu18.04解压大的tar.gz文件失败
  • 【Java系统接口幂等性解决实操】
  • java--WebSocket简单介绍
  • 2.安装CUDA详细步骤(含安装截图)
  • Dataloader的使用
  • 对抗攻击-知识点
  • HCIE学习之路:MSTP实现负载均衡实验
  • 全方位评测:11款主流指标平台优劣分析
  • [BSidesCF 2019]Kookie
  • 【测试报告】玄机抽奖系统(Java+Selenium+Jmeter自动化测试)
  • MyBatis-Plus 通用 Service(IService)详解与实战
  • Mybatis Plus 多数据源
  • 【LeetCode 热题 100】51. N 皇后——回溯
  • WiFi Mouse PC端 v1.7.2 官方中文版