如何高效的使用java实现类似抖音的评论点赞列表(互动消息)以及点赞的基本操作
目录
前言
实现功能
一、数据库设计
1.评论点赞表数据库
二、实体类和VO对象
1.实体类
2.VO对象
三、代码实现
1.判断是否点赞
2.添加或取消点赞
3.查询用户被点赞评论的记录
4.查询用户点赞的评论列表
总结
前言
这篇文章是基于Java实现的一个点赞功能,是在微服务上的评论功能的子模块,以及类似于抖音的评论点赞列表,可以联表查询用户点赞的评论列表和用户被点赞的评论列表,其中并没有使用redis和mq的中间件进行优化。
实现功能
实现添加取消点赞,判断是否点赞,查看用户点赞的评论列表和用户被点赞的评论列表等。
一、数据库设计
1.评论点赞表数据库

二、实体类和VO对象
1.实体类
实体类内容与数据库相同,在此不做展示。
2.VO对象
public class LikeVO {/*** 点赞表主键*/Integer likeId;/*** 用户信息*/UserSimpleVO userInfo;/*** 评论内容*/String content;/*** 点赞创建时间*/Timestamp createTime;}
三、代码实现
1.判断是否点赞
@Overridepublic boolean isLike(Integer userId, Integer commentId) {LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Like::getUserId,userId).eq(Like::getCommentId,commentId);Long count = likeMapper.selectCount(queryWrapper);return count>0;}
2.添加或取消点赞
@Overridepublic boolean like(Integer userId, Integer commentId) {//lambda查询是否存在点赞记录LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Like::getCommentId,commentId).eq(Like::getUserId,userId);Like like = likeMapper.selectOne(queryWrapper);//判断点赞记录是否为空,为空则添加,不为空则删除if(like!=null){int row = likeMapper.delete(queryWrapper);commentMapper.updateLikeNum(commentId,-1);return row>0;}like = new Like();like.setCommentId(commentId);like.setUserId(userId);int row = likeMapper.insert(like);//进行评论点赞数的减少commentMapper.updateLikeNum(commentId,1);return row>0;}
3.查询用户被点赞评论的记录
类似于抖音的互动消息查看

使用了ArrayList、HashMap和stream流等操作加快查询效率。
//由于我点赞表中只有点赞用户的id和评论id,所以先进行了查询该用户所有评论的操作,若有什么优化方法可以评论教我一下。
@Overridepublic List likeByCommons(Integer userId) {//查询出该用户的所有评论LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Comment::getUserId,userId);List comments = commentMapper.selectList(queryWrapper);//判断该用户是否有评论,若没有则返回空集合。if (comments.size() == 0) {return new ArrayList<>();}//统计这些评论的idList commentIds = new ArrayList<>();//创建评论id和评论内容的映射Map commentInfo = new HashMap<>();for(Comment comment:comments){commentIds.add(comment.getId());commentInfo.put(comment.getId(),comment.getContent());}//查询出点赞关系LambdaQueryWrapper likeLambdaQueryWrapper = new LambdaQueryWrapper<>();likeLambdaQueryWrapper.in(Like::getCommentId,commentIds);likeLambdaQueryWrapper.orderByDesc(Like::getCreateTime);List likes = likeMapper.selectList(likeLambdaQueryWrapper);//把查出的点赞关系按照时间排序//likes = likes.stream().sorted(Comparator.comparing(Like::getCreateTime).reversed()).collect(Collectors.toList());//查出点赞用户信息Set userIds = new HashSet<>();for(Like like:likes){userIds.add(like.getUserId());}List userList = new ArrayList<>(userIds);Map userInfo = userClient.getUserDeatilInfoMap(userList).getData();//stream流把comment对象赋值到likeVO中return likes.stream().map((item) -> {LikeVO likeVO = new LikeVO();likeVO.setLikeId(item.getLikeId());likeVO.setContent(commentInfo.get(item.getCommentId()));likeVO.setUserInfo(userInfo.get(item.getUserId()));likeVO.setCreateTime(item.getCreateTime());return likeVO;}).collect(Collectors.toList());}
4.查询用户点赞的评论列表
@Overridepublic List likeCommons(Integer userId) {//查出该用户点赞的所有评论LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Like::getUserId,userId);queryWrapper.orderByDesc(Like::getCreateTime);List likeList = likeMapper.selectList(queryWrapper);if (likeList.size() == 0) {return new ArrayList<>();}//查出对应的评论信息List commentIds = new ArrayList<>();for(Like like:likeList){commentIds.add(like.getCommentId());}List commentList = commentMapper.selectBatchIds(commentIds);//查询出被点赞评论的用户信息和创建评论关系的映射Map commentInfo = new HashMap<>();Set userIds = new HashSet<>();for(Comment comment:commentList){userIds.add(comment.getUserId());commentInfo.put(comment.getId(),comment);}List userList = new ArrayList<>(userIds);Map userInfo = userClient.getUserDeatilInfoMap(userList).getData();//stream流把comment对象赋值到likeVO中return likeList.stream().map((item) -> {LikeVO likeVO = new LikeVO();likeVO.setLikeId(item.getLikeId());likeVO.setUserInfo(userInfo.get(item.getUserId()));likeVO.setContent(commentInfo.get(item.getCommentId()).getContent());likeVO.setCreateTime(item.getCreateTime());return likeVO;}).collect(Collectors.toList());}
总结
这是大学生在写项目时的一些功能代码分享,若有不足请大家指出。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
