项目持续更新中:

防抖音短视频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)相关推荐

  1. 从零开始搭建仿抖音短视频APP--后端开发粉丝业务模块(3)

    项目持续创作中: 仿抖音短视频APP专栏 目录 实现用户点赞视频 用户取消点赞 用户是否点赞视频的判断 实现用户点赞视频 用户在点赞我们的视频后,我们需要去实现一些相关的业务, 这里需要对应到数据库的 ...

  2. 从零开始搭建仿抖音短视频APP--后端开发粉丝业务模块(1)

    项目持续更新中: 仿抖音短视频APP专栏 目录 关注短视频博主 Redis技术妙用 取消关注博主 关注短视频博主 在我们的主页中,刷视频时是可以在头像下方进行一个关注 点击头像,进入对方的主页也是可以 ...

  3. 从零开始搭建仿抖音短视频APP-后端开发消息业务模块(1)

    项目持续更新中: 仿抖音短视频APP专栏 目录 保存系统消息到MongoDB 系统消息入库保存-关注 系统消息入库保存-点赞短视频 系统消息入库保存-评论与回复 保存系统消息到MongoDB 我们把m ...

  4. 从零快速搭建仿抖音短视频APP-后端开发粉丝业务模块(4)

    项目持续更新中: 仿抖音短视频APP专栏 目录 视频页点赞总数 用户页点赞视频列表展示 我的关注视频列表展示 互粉朋友视频瀑布列表展示 视频页点赞总数 在我们的点赞下面会有一个数字,代表点赞总数.我们 ...

  5. 从零开始搭建仿抖音短视频App-前后端开发模式,前端框架的选择、前端项目搭建

    目录 前后端开发模式 传统JavaWeb开发模式 前后端分离模式​编辑 前端框架的选择-UniApp介绍 内网互通原则 运行到iphone与Android 前后端开发模式 传统JavaWeb开发模式 ...

  6. 从零开始搭建仿抖音短视频APP-后端开发短视频业务模块(2)

    项目持续更新中: 仿抖音短视频APP 目录 实现数据层mybatis自定义mapper与sql 查询短视频列表api 实现下拉刷新和分页功能 实现数据层mybatis自定义mapper与sql 在数据 ...

  7. 从零开始搭建仿抖音短视频APP-后端开发短视频业务模块(3)

    项目持续更新中: 仿抖音短视频APP专栏 目录 视频详情页展示的数据层实现 视频详情页展示的api实现 短视频下载.复制连接.二维码展示 视频保存到相册 复制链接 二维码展示 实现转为私密或公开视频 ...

  8. 从零开始搭建仿抖音短视频APP-后端消息业务模块开发(2)-基础版完结篇

    项目持续更新中: 仿抖音短视频APP专栏 目录 系统消息入库保存 MongoDB分页查询系统消息列表 删除系统消息 系统消息入库保存 这里还剩下最后一个点赞评论没有完成 这里如果点赞了你的评论,你们视 ...

  9. 从零开始搭建仿抖音短视频APP-开发用户业务模块(3)

    项目持续更新中: 仿抖音短视频APP专栏 目录 注册登录-BO接受前端参数验证 对BO校验进行统一封装 开发用户是否存在 开发创建用户Service 实现短信注册登录与分布式会话 注册登录-BO接受前 ...

最新文章

  1. 13本干货书籍,百余篇原创来了
  2. 深度估计相关原理(计算机视觉和深度学习基础)
  3. html css背景图片精灵技术,HTML入门学习笔记--CSS背景和精灵图(5)
  4. [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法
  5. MySQL存储引擎中的MyISAM和InnoDB区别详解
  6. 1491. [NOI2007]社交网络【最短路计数】
  7. python数据匹配_python 匹配@
  8. php json转数组_相同逻辑的php与golang代码效率对比,最好语言落谁家…
  9. 1CCTableView的使用,TableView响应和小格子tableView实现
  10. java使用xml存储数据_用存储过程和 JAVA 写报表数据源有什么弊端?
  11. 移动Web UI库(H5框架)
  12. 支持二级汉字的 php 汉字助记码生成
  13. java pageoffice_JAVA调用PageOffice在线打开、编辑Word文档
  14. 台州学院计算机翁黄格,中国高校计算机大赛-团体程序设计天梯赛全国总决赛获奖.DOC...
  15. 在我差点崩溃了的时候,还好有主从复制
  16. html网页早发白帝城,唐.李白《早发白帝城》(快乐写字)
  17. MySQL从创建数据库到删库跑路之旅
  18. 群晖Docker容器“failed to initialize logging driver“解决办法
  19. 微软推出游戏服务器,成为云玩家 微软将推出“Project xCloud”云游戏服务
  20. 如何删除hao123?

热门文章

  1. 数字摄影测量之特征点提取算法
  2. 《大天蓬》片尾升华,燃情!
  3. matlab求ra,RA调度算法及Matlab计算程序
  4. java里speak的用法,speak的用法总结大全
  5. STM32-ISP烧录检测不到芯片问题
  6. 【RDMA】infiniband网卡安装|ib网卡命令|ibdump 用法说明
  7. app开发对于企业及商家来说为什么越来越重要?
  8. C语言常用语句之-循环语句
  9. 【vite+pinia】
  10. awvs安装及问题解决