一、课程介绍
【课程名称】SpringBoot 2.x 实战仿B站高性能后端项目。
【章节】第三章3.20、3.21、3.22、3.23
【讲师】HELLOSTAR
二、课程内容
今天学习的内容也是朴实无华的业务代码开发。主要实现下列功能,只记录主要功能的业务逻辑:
获取用户关注分组
获取粉丝用户列表(保存是否互相关注)
新增用户关注分组
查询用户关注分组
查询用户名,分页显示结果
功能一、获取用户关注分组实现逻辑(取自3.20章节视频的问答区的同学解释的)
1.首先创建一个list,根据userId在t_user_following表里查到这个用户的所有关注关系。(比如表中userId为2的用户的所有行,后面也用这个举例便于理解)。
2.然后提取出来2号用户关注的所有用户的userId,根据这些userId查询这些用户的userInfo存进userInfoList里。
3.通过两个for循环,匹配上述两个list中的userId字段,使得每个userFollowing变量里都可以储存对应的userInfo。
4.allGroup用于存放2号用户的全部关注分组(包括系统的0,1,2分组和自定义分组),作为一个整体加入最后返回前端的result。
5.然后再分别以不同类型的分组为整体,加入result。具体的实现也是通过两个for循环,匹配表t_user_following的groupId字段和t_following_group的id字段。
最后返回的result里的分组信息(记住group里还包含了userInfoList),逻辑上可能有以下几项:result[0]是全部关注分组,result[1]是特别关注分组,result[2]默默关注分组, result[3]系统默认分组, result[4]用户自定义分组(可以有多个)。
// 第一步:获取关注的用户列表 // 第二步:根据关注用户的id查询关注用户的基本信息 // 第三步:将关注用户按关注分组进行分类 public List<FollowingGroup> getUserFollowings(Long userId){ List<UserFollowing> list = userFollowingDao.getUserFollowings(userId); Set<Long> followingIdSet = list.stream().map(UserFollowing::getFollowingId).collect(Collectors.toSet()); List<UserInfo> userInfoList = new ArrayList<>(); if(followingIdSet.size() > 0){ userInfoList = userService.getUserInfoByUserIds(followingIdSet); } for(UserFollowing userFollowing : list){ for(UserInfo userInfo : userInfoList){ if(userFollowing.getFollowingId().equals(userInfo.getUserId())){ userFollowing.setUserInfo(userInfo); } } } List<FollowingGroup> groupList = followingGroupService.getByUserId(userId); FollowingGroup allGroup = new FollowingGroup(); allGroup.setName(UserConstant.USER_FOLLOWING_GROUP_ALL_NAME); allGroup.setFollowingUserInfoList(userInfoList); List<FollowingGroup> result = new ArrayList<>(); result.add(allGroup); for(FollowingGroup group : groupList){ List<UserInfo> infoList = new ArrayList<>(); for(UserFollowing userFollowing : list){ if(group.getId().equals(userFollowing.getGroupId())){ infoList.add(userFollowing.getUserInfo()); } } group.setFollowingUserInfoList(infoList); result.add(group); } return result; }
功能二、分页显示查询用户结果(此处sql手写分页,未用分页插件)
1.前端传入查询用户名,当前页面,显示条数。
2.拼接分页查询sql,得到该用户名的分页查询结果。
3.检查当前查询结果中的用户是否已经被关注,存储在布尔字段isFollowed中。已被关注的用户 isFollowed为true,未被关注的为false.
4.处理后的查询结果返回前端.
@GetMapping("/user-infos") public JsonResponse<PageResult<UserInfo>> pageListUserInfos(@RequestParam Integer no, @RequestParam Integer size, String nick){ Long userId = userSupport.getCurrentUserId(); JSONObject params = new JSONObject(); params.put("no", no); params.put("size", size); params.put("nick", nick); params.put("userId", userId); PageResult<UserInfo> result = userService.pageListUserInfos(params); if(result.getTotal() > 0){ List<UserInfo> checkedUserInfoList = userFollowingService.checkFollowingStatus(result.getList(), userId); result.setList(checkedUserInfoList); } return new JsonResponse<>(result); }
三、课程收获
业务部分的开发,主要是理解这部分的业务逻辑,并写出相应的代码。主要收获就是了解了用户关注这类功能的实现逻辑。用户关注功能十分常用,在各种系统中都能使用。这次学习到也是十分有用。指不定哪天就用到了。
有注意到慕课的编辑文章页面和浏览文章的布局不一样吗?每行的字数都不一样,这样排版发布之后都乱了哇。就很烦。
四、学习过程
共同学习,写下你的评论
评论加载中...
作者其他优质文章