Spring?Boot音樂服務器項目如何刪除音樂模塊
Java音樂播放服務器:刪除音樂功能設計與實現(xiàn)詳解
在音樂播放服務器中,刪除音樂功能分為單個刪除和批量刪除兩個核心模塊。
接口設計預期設計:
請求: {post, /music/delete, id }
響應: {"status":0,"message":"刪除成功!", "data":true }
我們已經在前面定義了Music的實體層(Model)
接下來我們就定義出兩個接口
一、Mapper層(數(shù)據(jù)訪問層)
1. 接口聲明(MusicMapper.java)<查到了才能刪,查是刪的基礎>
/**
根據(jù)ID刪除?樂
@param musicId
@return
*/
int deleteMusicById(int musicId);
/**
根據(jù)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,"在數(shù)據(jù)庫中刪除音樂失敗",false);
}
}在我習慣看來,我是不太習慣在controller層寫下這么多邏輯,我認為這里的絕大部分代碼應該是放在service層去實現(xiàn)的,但是這個項目體量接口比較少,所以我就都放在controller層一并實現(xiàn)了。
寫完后我們跑起來運行一遍


2. 批量刪除(/music/deleteSel)
<實體層、mapper層對批量處理都是適用的,所以只需要在這里處理一個批量邏輯即可>
/**
根據(jù)id數(shù)組批量刪除?樂
@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) {
//數(shù)據(jù)庫刪除成功,那么服務器上的數(shù)據(jù)也需要發(fā)?改變
//刪除服務器?錄下的對應的?件
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,"刪除數(shù)據(jù)上的?樂信息失敗",false);
}
}
if(sum == id.size()) {
System.out.println("刪除成功!");
return new ResponseBodyMessage<>(0,"批量刪除成功",true);
}else {
System.out.println("刪除失?。?);
return new ResponseBodyMessage<>(0,"批量刪除成功",false);
}
}批量刪除實際也就是將id變成一個id[]的一維數(shù)組,在刪除時遍歷到for循環(huán)中,根據(jù)給過來的參數(shù)遍歷刪除



三、關鍵技術解析
- 文件路徑處理
- 通過
@Value("${music.local.path}")讀取配置文件中的存儲路徑 - 從URL參數(shù)解析真實文件名(如
/music/get?path=song→song.mp3)
- 通過
- 事務性操作
- 數(shù)據(jù)庫刪除 → 文件刪除原子操作
- 任一環(huán)節(jié)失敗立即返回錯誤,避免臟數(shù)據(jù)
- 安全校驗
- Session驗證確保用戶登錄狀態(tài)
- 前置查詢防止非法刪除
- 批量刪除優(yōu)化
- 循環(huán)處理每個ID而非單條SQL
- 獨立處理每條記錄保證部分成功時的可控性


總結:刪除功能通過三層架構實現(xiàn):
- 實體層映射數(shù)據(jù)結構
- Mapper層操作數(shù)據(jù)庫
- Controller層協(xié)調業(yè)務邏輯與文件操作
關鍵點在于保持數(shù)據(jù)庫記錄與物理文件的同步,并通過嚴格校驗保證系統(tǒng)安全性。
代碼倉庫:刪除音樂接口開發(fā) 7.22 ·/音樂服務器 - Gitee.com
到此這篇關于Spring Boot音樂服務器項目如何刪除音樂模塊的文章就介紹到這了,更多相關Spring Boot刪除音樂模塊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot監(jiān)控所有線程池的四種解決方案及代碼案例
這篇文章介紹了四種監(jiān)控Spring Boot中所有線程池的解決方案,并提供了代碼案例,推薦使用自動發(fā)現(xiàn)機制來監(jiān)控所有線程池,需要的朋友可以參考下2025-12-12
詳解Java數(shù)據(jù)庫連接JDBC基礎知識(操作數(shù)據(jù)庫:增刪改查)
這篇文章主要介紹了詳解Java數(shù)據(jù)庫連接JDBC基礎知識(操作數(shù)據(jù)庫:增刪改查),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Windows上安裝并使用SDKMAN詳細教程(JDK多版本管理)
在Linux和macOS上,開發(fā)者可以輕松使用SDKMAN來管理多個JDK版本,但Windows原生并不直接支持SDKMAN,這篇文章主要介紹了Windows上安裝并使用SDKMAN管理JDK多版本管理的相關資料,需要的朋友可以參考下2026-05-05

