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循环中,根据给过来的参数遍历删除
三、关键技术解析
- 文件路径处理
- 通过
@value("${music.local.path}")
读取配置文件中的存储路径 - 从url参数解析真实文件名(如
/music/get?path=song
→song.mp3
)
- 通过
- 事务性操作
- 数据库删除 → 文件删除原子操作
- 任一环节失败立即返回错误,避免脏数据
- 安全校验
- session验证确保用户登录状态
- 前置查询防止非法删除
- 批量删除优化
- 循环处理每个id而非单条sql
- 独立处理每条记录保证部分成功时的可控性
总结:删除功能通过三层架构实现:
- 实体层映射数据结构
- mapper层操作数据库
- controller层协调业务逻辑与文件操作
关键点在于保持数据库记录与物理文件的同步,并通过严格校验保证系统安全性。
代码仓库:删除音乐接口开发 7.22 ·/音乐服务器 - gitee.com
到此这篇关于spring boot音乐服务器项目如何删除音乐模块的文章就介绍到这了,更多相关spring boot删除音乐模块内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论