阿华代码,不是逆风,就是我疯
你们的点赞收藏是我前进最大的动力!!
希望本文内容能够帮助到你!!
目录
零:项目结果展示
项目目前已经上线
音乐播放器登录页面铁子们可以后台私信获取管理员用户和密码
一:导入
上一篇文章,我们完成了删除音乐,查询音乐模块,本篇文章我们肝,收藏页面——收藏音乐功能,取消收藏,收藏页面的删除音乐
二:添加音乐到喜欢的列表
1:请求响应模块设计
2:Mapper层接口设计
/**
* 检查是否已经收藏过该音乐
* @param userId
* @param musicId
* @return
*/
Music findLoveMusicByMusicIdAndUserId(int musicId,int userId);
/**
* 点赞/收藏音乐
* @param userId
* @param musicId
* @return
*/
boolean insertLoveMusic(int userId , int musicId);
3:Mybatis层
<!--根据⽤⼾ID和⾳乐ID查询收藏的⾳乐 -->
<select id="findLoveMusicByMusicIdAndUserId" resultType="com.example.musicserver.model.Music">
select * from lovemusic where music_id = #{musicId} and user_id = #{userId};
</select>
<insert id="insertLoveMusic">
insert into lovemusic (user_id , music_id) values (#{userId} , #{musicId});
</insert>
4:Controller层
注意Service层的依赖的注入哦
这里简单讲解一下代码逻辑,参数绑定id,前端传过是字符串,我们解析为int类型 ,
第一步:判断一下当前是否已经登录
第二步:拿到当前用户id,和用户想要收藏的音乐id,去数据库收藏表中找是否已有,有的话说明已经收藏过了
第三步:没收藏过,就把当前音乐插入,数据库收藏table中,记录一下信息
/**
* 收藏音乐
* @param id
* @param request
* @return
*/
@RequestMapping("/likeMusic")
public ResponseBodyMessage<Boolean> likeMusic(@RequestParam String id , HttpServletRequest request){
int musicId = Integer.parseInt(id);
log.info("喜欢的音乐的id是{}",musicId);
HttpSession httpSession = request.getSession(false);//没有session不创建
if(httpSession == null ||
httpSession.getAttribute(Constants.USERINFO_SESSION_KEY) == null){
log.info("没有登陆");
return new ResponseBodyMessage<>(-1,"没有登录",false);
}
User user = (User)httpSession.getAttribute(Constants.USERINFO_SESSION_KEY);//获取用户信息
int userId = user.getId();
log.info("当前登录用户的id是{}",userId);
//查询当前⽤⼾是否点赞过该⾳乐
Music music = loveMusicService.findLoveMusicByMusicIdAndUserId(userId, musicId);
if(music != null){
return new ResponseBodyMessage<>(-1,"该用户已经收藏过该音乐了",false);
}
boolean result = loveMusicService.insertLoveMusic(userId,musicId);
if(result){
return new ResponseBodyMessage<>(0,"该音乐收藏成功",true);
}
return new ResponseBodyMessage<>(-1,"该音乐收藏失败",false);
}
上述的代码就不过多bb了,比较简单
5:Service层
我们主要实现这两个方法
public List<Music> findAllLoveMusicByUserId(int userId) {
return loveMusicMapper.findAllLoveMusicByUserId(userId);
}
public List<Music> findLoveMusicByKeyAndUserId(String musicName, int userId) {
return loveMusicMapper.findLoveMusicByKeyAndUserId(musicName,userId);
}
三:查询喜欢音乐模块
这里的查询逻辑与上一篇文章逻辑一样,就不过多赘述了
1:Mapper层
/**
* 如果没有传入具体的歌曲名,显示当前用户收藏的所有音乐
* @param userId
* @return
*/
List<Music> findAllLoveMusicByUserId(int userId);
/**
* 根据某个用户id和歌曲名称查询,某个用户收藏的音乐
* @param musicName
* @param userId
* @return
*/
List<Music> findLoveMusicByKeyAndUserId(String musicName , int userId);
2:Mybatis
<select id="findAllLoveMusicByUserId" resultType="com.example.musicserver.model.Music">
select m.* from lovemusic lm , music m where lm.music_id = m.id and lm.user_id = #{userId};
</select>
<select id="findLoveMusicByKeyAndUserId" resultType="com.example.musicserver.model.Music">
select m.* from lovemusic lm , music m
where lm.music_id = m.id and lm.user_id = #{userId} and title like concat('%',#{musicName},'%')
</select>
3:Controller
注意的一点:这里我们返回的是一个集合,里面有很多Music
@RequestMapping("/findLoveMusic")
public ResponseBodyMessage<List<Music>> findLoveMusic(@RequestParam(required = false) String musicName
, HttpServletRequest request){
HttpSession httpSession = request.getSession(false);
if(httpSession == null
|| httpSession.getAttribute(Constants.USERINFO_SESSION_KEY)== null){
log.info("没有登陆");
return new ResponseBodyMessage<>(-1,"没有登录",null);
}
User user = (User)httpSession.getAttribute(Constants.USERINFO_SESSION_KEY);
int userId = user.getId();
List<Music> musics = new ArrayList<>();
if(musicName == null || musicName == ""){
musics = loveMusicService.findAllLoveMusicByUserId(userId);
}else{
musics = loveMusicService.findLoveMusicByKeyAndUserId(musicName, userId);//歌曲名不为null就模糊查询
}
return new ResponseBodyMessage<>(0,"查询到了所有的收藏音乐",musics);
}
4:Service
public List<Music> findAllLoveMusicByUserId(int userId) {
return loveMusicMapper.findAllLoveMusicByUserId(userId);
}
public List<Music> findLoveMusicByKeyAndUserId(String musicName, int userId) {
return loveMusicMapper.findLoveMusicByKeyAndUserId(musicName,userId);
}
四: 移除收藏音乐模块
1:请求响应设计
2:Mapper层
/**
* 移除收藏的音乐,但不是删除音乐本身,只是从数据库中删除了记录
* @param userId
* @param musicId
* @return
*/
int deleteLoveMusic(int userId , int musicId);
/**
* 当删除库中的⾳乐的时候,同步删除lovemusic中的数据
* @param musicId
* @return
*/
int deleteLoveMusicById(int musicId);
3:MyBatis
<delete id="deleteLoveMusic">
delete from lovemusic where user_id = #{userId} and music_id = #{musicId}
</delete>
<insert id="deleteLoveMusicById">
delete from lovemusic where music_id = #{musicId}
</insert>
4:Controller
@RequestMapping("/deleteLoveMusic")
public ResponseBodyMessage<Boolean> deleteLoveMusic(@RequestParam String id , HttpServletRequest request){
int musicId = Integer.parseInt(id);
HttpSession httpSession = request.getSession(false);
if(httpSession == null
|| httpSession.getAttribute(Constants.USERINFO_SESSION_KEY)== null){
log.info("没有登陆");
return new ResponseBodyMessage<>(-1,"没有登录",false);
}
User user = (User)httpSession.getAttribute(Constants.USERINFO_SESSION_KEY);
int userId = user.getId();
int ret = loveMusicService.deleteLoveMusic(userId,musicId);
if(ret == 1){
return new ResponseBodyMessage<>(0,"取消收藏成功",true);
}else{
return new ResponseBodyMessage<>(-1,"取消收藏失败",false);
}
}
5:Service
注意:在收藏页面删除的音乐,那么音乐主页中该音乐也需要同步删除
public int deleteLoveMusic(int userId, int musicId) {
return loveMusicMapper.deleteLoveMusic(userId,musicId);
}
public Integer deleteLoveMusicById(int iid) {
return loveMusicMapper.deleteLoveMusicById(iid);
}