从零开始搭建仿抖音短视频APP-后端开发粉丝业务模块(2)
项目持续更新中:
防抖音短视频APP项目专栏
目录
判断用户是否关注博主
我的关注列表
我的粉丝列表
实现互粉标记显示
判断用户是否关注博主
在这里我们对这个人进行关注之后,重新退出界面再次进入,并没有变为已关注,所以我们在这里要做一个查询
我们在service层写接口:
接口实现:
@Overridepublic boolean queryDoIFollowVloger(String myId, String vlogerId) {Fans vloger = queryFansRelationship(myId,vlogerId);return vloger !=null;}
这里我们先查看一下前端的路由:
接着我们在controller层:
@GetMapping("queryDoIFollowVloger")public GraceJSONResult queryDoIFollowVloger(@RequestParam String myId,@RequestParam String vlogerId){return GraceJSONResult.ok(fansService.queryDoIFollowVloger(myId,vlogerId));}
接着我们重新启动一下,在刷新回到我们的主页,这时候就变成了已关注的状态。
注:我们在service这一层是通过查询数据库的方式来做的,但是我们之前已经通过redis进行处理。所以我们在这里也可以从redis中查询,返回判断一个true或者false。
我的关注列表
我们在其他博主的页面时,关注和粉丝是不能点击查看的。在自己的主页,是可以查看自己的关注和粉丝。
这里我们都是要做一些相应的查询。
我们需要有一个VO:
这个是我们需要展现到前端的,在这里我们对数据进行一个封装。
我们在custom.xml文件中完成编写,
<select id="queryMyFollows" resultType="com.imooc.vo.VlogerVO" parameterType="map">SELECTu.id as vlogerId,u.nickname as nickname,u.face as faceFROMfans fLEFT JOINusers uONf.vloger_id = u.idWHEREf.fan_id = #{paramMap.myId}ORDER BYu.nicknameASC</select>
随后就是完成一个映射
这里mapper层完成之后,就要到我们的业务service层:
这里需要用到我们的分页
接着就要完成我们的实现,首先我们需要把我们需要调用的Map给new出来:
@Overridepublic PagedGridResult queryMyFollow(String myId, Integer page, Integer pageSize) {Map<String,Object> map=new HashMap<>();map.put("myId",myId);List<VlogerVO> list = fansMapperCustom.queryMyFollows(map);return setterPagedGrid(list,page);}
在完成controller层之前,我们先看下前端:
在后端:
接着重启,做一个测试:
我们这里进行一个取关操作,是成功的。
再次进入,就是没有关注的状态了。
我的粉丝列表
我的粉丝列表和关注列表本周上是差不多的。
首先准备一个FansVO:
isFriend是表示我们之间是否是朋友关系,我们这里可以用来做一个互粉的标记。
在custom.xml中编写我们的相关代码:
<select id="queryMyFans" resultType="com.imooc.vo.FansVO" parameterType="map">SELECTu.id as fanId,u.nickname as nickname,u.face as faceFROMfans fLEFT JOINusers uONf.fan_id = u.idWHEREf.vloger_id = #{paramMap.myId}ORDER BYu.nicknameASC</select>
随后到我们的接口中:
接着写我们的service:
然后实现这方法:
@Overridepublic PagedGridResult queryMyFans(String myId, Integer page, Integer pageSize) {Map<String,Object> map=new HashMap<>();map.put("myId",myId);List<FansVO> list = fansMapperCustom.queryMyFans(map);return setterPagedGrid(list,page);}
最后就是在controller中快速实现:
先在前端查看:
这里和我的关注列表几乎是一样的。
@GetMapping("queryMyFans")public GraceJSONResult queryMyFans(@RequestParam String myId,@RequestParam Integer page,@RequestParam Integer pageSize){return GraceJSONResult.ok(fansService.queryMyFans(myId,page,pageSize));}
重新启动,测试一下:
这里我的粉丝数为0,但实际点击进去,是有粉丝的
我们点击进去,还是有粉丝的。
其实数据已经保存到数据库中了,只是这里还没有做到我们的redis中,所以没有显示。
这里的回粉是另一个标记状态,我们会在后面实现。
实现互粉标记显示
在我们的vo中,默认isFriend是false,不管是不是朋友,所以的显示标记都是回粉
所以我们要做一个查询,查这个isFriend是true还是false。
我们在service中修改之前的代码,在里面进行对reids进行循环查询。
注:
/**
* 判断粉丝是否是我的朋友(互粉,互关)
*普通做法:
* 多表关联+嵌套关联查询,这样会违反多表关联的规范,不可取,高并发会出现性能问题
*
* 常规做法:
* 1.避免过多的表关联查询,先查询我的粉丝列表,获得fansList
* 2.避免粉丝关注我,并且我也关注粉丝,--》循环fansList,获得每一个粉丝,再去数据库查询我是否关注他
* 3.如果我也关注他(粉丝),说明我俩互为朋友,则标记flag为true
*
* 高端做法:
* 1.关注/取关的时候,关联关系保存在redis中,不要依赖数据库
* 2.数据库查询后,直接循环查询redis,避免第二次循环查询数据库的尴尬局面
*/
@Overridepublic PagedGridResult queryMyFans(String myId, Integer page, Integer pageSize) {/*** 判断粉丝是否是我的朋友(互粉,互关)*普通做法:* 多表关联+嵌套关联查询,这样会违反多表关联的规范,不可取,高并发会出现性能问题** 常规做法:* 1.避免过多的表关联查询,先查询我的粉丝列表,获得fansList* 2.避免粉丝关注我,并且我也关注粉丝,--》循环fansList,获得每一个粉丝,再去数据库查询我是否关注他* 3.如果我也关注他(粉丝),说明我俩互为朋友,则标记flag为true** 高端做法:* 1.关注/取关的时候,关联关系保存在redis中,不要依赖数据库* 2.数据库查询后,直接循环查询redis,避免第二次循环查询数据库的尴尬局面*/Map<String,Object> map=new HashMap<>();map.put("myId",myId);List<FansVO> list = fansMapperCustom.queryMyFans(map);for(FansVO f: list){String relationship = redis.get(REDIS_FANS_AND_VLOGGER_RELATIONSHIP+":"+myId+":"+f.getFanId());if(StringUtils.isNotBlank(relationship) && relationship.equalsIgnoreCase("1")){f.setFriend(true);}}return setterPagedGrid(list,page);}
重新启动一下,这里如果是好友就会显示互关。
那么以上就完成了互粉标记的显示。
从零开始搭建仿抖音短视频APP-后端开发粉丝业务模块(2)相关推荐
- 从零开始搭建仿抖音短视频APP--后端开发粉丝业务模块(3)
项目持续创作中: 仿抖音短视频APP专栏 目录 实现用户点赞视频 用户取消点赞 用户是否点赞视频的判断 实现用户点赞视频 用户在点赞我们的视频后,我们需要去实现一些相关的业务, 这里需要对应到数据库的 ...
- 从零开始搭建仿抖音短视频APP--后端开发粉丝业务模块(1)
项目持续更新中: 仿抖音短视频APP专栏 目录 关注短视频博主 Redis技术妙用 取消关注博主 关注短视频博主 在我们的主页中,刷视频时是可以在头像下方进行一个关注 点击头像,进入对方的主页也是可以 ...
- 从零开始搭建仿抖音短视频APP-后端开发消息业务模块(1)
项目持续更新中: 仿抖音短视频APP专栏 目录 保存系统消息到MongoDB 系统消息入库保存-关注 系统消息入库保存-点赞短视频 系统消息入库保存-评论与回复 保存系统消息到MongoDB 我们把m ...
- 从零快速搭建仿抖音短视频APP-后端开发粉丝业务模块(4)
项目持续更新中: 仿抖音短视频APP专栏 目录 视频页点赞总数 用户页点赞视频列表展示 我的关注视频列表展示 互粉朋友视频瀑布列表展示 视频页点赞总数 在我们的点赞下面会有一个数字,代表点赞总数.我们 ...
- 从零开始搭建仿抖音短视频App-前后端开发模式,前端框架的选择、前端项目搭建
目录 前后端开发模式 传统JavaWeb开发模式 前后端分离模式编辑 前端框架的选择-UniApp介绍 内网互通原则 运行到iphone与Android 前后端开发模式 传统JavaWeb开发模式 ...
- 从零开始搭建仿抖音短视频APP-后端开发短视频业务模块(2)
项目持续更新中: 仿抖音短视频APP 目录 实现数据层mybatis自定义mapper与sql 查询短视频列表api 实现下拉刷新和分页功能 实现数据层mybatis自定义mapper与sql 在数据 ...
- 从零开始搭建仿抖音短视频APP-后端开发短视频业务模块(3)
项目持续更新中: 仿抖音短视频APP专栏 目录 视频详情页展示的数据层实现 视频详情页展示的api实现 短视频下载.复制连接.二维码展示 视频保存到相册 复制链接 二维码展示 实现转为私密或公开视频 ...
- 从零开始搭建仿抖音短视频APP-后端消息业务模块开发(2)-基础版完结篇
项目持续更新中: 仿抖音短视频APP专栏 目录 系统消息入库保存 MongoDB分页查询系统消息列表 删除系统消息 系统消息入库保存 这里还剩下最后一个点赞评论没有完成 这里如果点赞了你的评论,你们视 ...
- 从零开始搭建仿抖音短视频APP-开发用户业务模块(3)
项目持续更新中: 仿抖音短视频APP专栏 目录 注册登录-BO接受前端参数验证 对BO校验进行统一封装 开发用户是否存在 开发创建用户Service 实现短信注册登录与分布式会话 注册登录-BO接受前 ...
最新文章
- 13本干货书籍,百余篇原创来了
- 深度估计相关原理(计算机视觉和深度学习基础)
- html css背景图片精灵技术,HTML入门学习笔记--CSS背景和精灵图(5)
- [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法
- MySQL存储引擎中的MyISAM和InnoDB区别详解
- 1491. [NOI2007]社交网络【最短路计数】
- python数据匹配_python 匹配@
- php json转数组_相同逻辑的php与golang代码效率对比,最好语言落谁家…
- 1CCTableView的使用,TableView响应和小格子tableView实现
- java使用xml存储数据_用存储过程和 JAVA 写报表数据源有什么弊端?
- 移动Web UI库(H5框架)
- 支持二级汉字的 php 汉字助记码生成
- java pageoffice_JAVA调用PageOffice在线打开、编辑Word文档
- 台州学院计算机翁黄格,中国高校计算机大赛-团体程序设计天梯赛全国总决赛获奖.DOC...
- 在我差点崩溃了的时候,还好有主从复制
- html网页早发白帝城,唐.李白《早发白帝城》(快乐写字)
- MySQL从创建数据库到删库跑路之旅
- 群晖Docker容器“failed to initialize logging driver“解决办法
- 微软推出游戏服务器,成为云玩家 微软将推出“Project xCloud”云游戏服务
- 如何删除hao123?