一、项目架构概览
该音乐播放服务器采用经典的MVC分层架构,核心模块包括:
- 实体层:定义数据模型
- Mapper层:数据库操作接口
- Controller层:HTTP请求处理
- 工具层:加密、响应封装等辅助功能
项目核心功能包括用户认证、音乐上传/播放、收藏管理等,下面按分层结构详解实现逻辑。
二、接口设计
- ⽀持模糊查询
- ⽀持传⼊参数为空
请求示例
{
"method": "get",
"url": "/music/findmusic",
"data": {
"musicName": musicName
}
}
响应示例
-
未给 musicName 传参时
{
"status": 0,
"message": "查询到了歌曲的信息",
"data": [
{
"id": 19,
"title": "银河与星斗(女生版)",
"singer": "gaobo",
"url": "/music/get?path=银河与星斗(女生版)",
"time": "2022-03-28",
"userid": 3
},
{
"id": 20,
"title": "liu",
"singer": "bit",
"url": "/music/get?path=liu",
"time": "2022-03-28",
"userid": 3
}
]
} -
给 musicName 传参时
{
"status": 0,
"message": "查询到了歌曲的信息",
"data": [
{
"id": 19,
"title": "银河与星斗(女生版)",
"singer": "gaobo",
"url": "/music/get?path=银河与星斗(女生版)",
"time": "2022-03-28",
"userid": 3
}
]
}
三、Mapper层实现
使用MyBatis实现数据库操作,核心接口:
1. 查询功能Mapper
/**
*根据歌曲名字,查询⾳乐
* @param name
* @return
*/
List<Music> findMusicByMusicName(String name);
/**
查询所有的⾳乐
@return
*/
List<Music> findMusic();
XML映射:
<select id="findMusicByMusicName"
resultType="com.example.musicplayer.model.Music">
select * from music where title like concat('%',#{musicName},'%')
</select>
<select id="findMusic" resultType="com.example.musicserver.model.Music">
select * from music
</select>
四、MusicController类新增⽅法
处理HTTP请求并调用Mapper操作:
音乐查询接口
/**
根据musicName查询音乐
@param musicName
@return
*/
@RequestMapping("/findmusic")
public ResponseBodyMessage<List<Music>> findMusic(@RequestParam(required=false)String musicName) {
List<Music> musicList = null;
if(musicName != null) {
musicList = musicMapper.findMusicByMusicName(musicName);
}else {
//默认查询全部的⾳乐
musicList = musicMapper.findMusic();
}
return new ResponseBodyMessage<>(0,"查询到了歌曲的信息",musicList);
}
测试工作



