当前位置:   article > 正文

网易云音乐评论功能实现(数据库设计)_java mysql 设计网易云评论

java mysql 设计网易云评论

数据表设计

1、需求分析(一问一答模式)

这种设计简单、直接,也满足了用户评论、回复的基本要求,对于没有大量用户评论的APP需求足够。

2、数据库字段设计 

                                             表字段                                           字段说明
id主键
show_id主题id (音乐或MV)
user_id评论用户userId
content评论内容(长度限制为140个中文汉字)
give_like点赞总量
create_time评论时间
state评论状态(正常默认 1,已删除 0)
reply_id回复评论id

因为我数据库没有冗余评论用户头像和昵称,需要根据user_id去查询,返回到一个评论中间类中

reply_id  字段默认为null,该字段不为null时,表示该条评论是回复别人的评论,用于设置回复某条评论的主键id

state 字段是会用到的,主要场景如下图

回复评论作者已经删除评论的话,不显示原评论的所有信息

3、返回评论列表

返回评论的数据结构这里,我用到了三个类(评论类、评论中间类、最终返回的评论类)

评论类

  1. package com.shinemi.realiart.model;
  2. import java.util.Date;
  3. // 评论类
  4. public class ArtShowComments {
  5. private Long id;
  6. private Long showId;
  7. private Long userId;
  8. private String content;
  9. private Long giveLike;
  10. private Date createTime;
  11. private Integer state;
  12. private Long replyId;
  13. public Long getId() {
  14. return id;
  15. }
  16. public void setId(Long id) {
  17. this.id = id;
  18. }
  19. public Long getShowId() {
  20. return showId;
  21. }
  22. public void setShowId(Long showId) {
  23. this.showId = showId;
  24. }
  25. public Long getUserId() {
  26. return userId;
  27. }
  28. public void setUserId(Long userId) {
  29. this.userId = userId;
  30. }
  31. public String getContent() {
  32. return content;
  33. }
  34. public void setContent(String content) {
  35. this.content = content == null ? null : content.trim();
  36. }
  37. public Long getGiveLike() {
  38. return giveLike;
  39. }
  40. public void setGiveLike(Long giveLike) {
  41. this.giveLike = giveLike;
  42. }
  43. public Date getCreateTime() {
  44. return createTime;
  45. }
  46. public void setCreateTime(Date createTime) {
  47. this.createTime = createTime;
  48. }
  49. public Integer getState() {
  50. return state;
  51. }
  52. public void setState(Integer state) {
  53. this.state = state;
  54. }
  55. public Long getReplyId() {
  56. return replyId;
  57. }
  58. public void setReplyId(Long replyId) {
  59. this.replyId = replyId;
  60. }
  61. }

 

评论中间类(继承了评论类,添加多两个成员变量,头像与昵称) 

  1. package com.shinemi.realiart.bean;
  2. import com.shinemi.realiart.model.ArtShowComments;
  3. // 评论中间类
  4. public class ArtShowCommentsBean extends ArtShowComments {
  5. // 评论用户头像
  6. private String userHeadPortrait;
  7. // 评论用户昵称
  8. private String userNickName;
  9. public void setArtShowComments(ArtShowComments artShowComments) {
  10. this.setId(artShowComments.getId());
  11. this.setShowId(artShowComments.getShowId());
  12. this.setUserId(artShowComments.getUserId());
  13. this.setContent(artShowComments.getContent());
  14. this.setGiveLike(artShowComments.getGiveLike());
  15. this.setCreateTime(artShowComments.getCreateTime());
  16. this.setState(artShowComments.getState());
  17. this.setReplyId(artShowComments.getReplyId());
  18. }
  19. public String getUserHeadPortrait() {
  20. return userHeadPortrait;
  21. }
  22. public void setUserHeadPortrait(String userHeadPortrait) {
  23. this.userHeadPortrait = userHeadPortrait;
  24. }
  25. public String getUserNickName() {
  26. return userNickName;
  27. }
  28. public void setUserNickName(String userNickName) {
  29. this.userNickName = userNickName;
  30. }
  31. }

评论返回类(该类中有三个变量,那就是上面的评论中间类和评论拥有者的状态了,评论拥有者主要给予前端判断该评论是否能让当前用户删除)

  1. package com.shinemi.realiart.bean;
  2. // 评论返回类
  3. public class ArtShowCommentsBO {
  4. // 原评论
  5. private ArtShowCommentsBean originalComments;
  6. // 回复评论
  7. private ArtShowCommentsBean replyComments;
  8. // 评论拥有者
  9. private boolean realyReviewers;
  10. public ArtShowCommentsBean getOriginalComments() {
  11. return originalComments;
  12. }
  13. public void setOriginalComments(ArtShowCommentsBean originalComments) {
  14. this.originalComments = originalComments;
  15. }
  16. public ArtShowCommentsBean getReplyComments() {
  17. return replyComments;
  18. }
  19. public void setReplyComments(ArtShowCommentsBean replyComments) {
  20. this.replyComments = replyComments;
  21. }
  22. public boolean isRealyReviewers() {
  23. return realyReviewers;
  24. }
  25. public void setRealyReviewers(boolean realyReviewers) {
  26. this.realyReviewers = realyReviewers;
  27. }
  28. }

思路流程是这样的:

根据主题id 分页查询 评论表,将获取回来的评论进行遍历,判断reply_id是否为null,是的话new 中间类对象,将评论对象设置进去,再查出评论者头像and昵称设置,完成后创建评论返回类、将刚刚的评论中间类set 入 评论返回类的 originalComments就ok了

reply_id 不为null、就需要根据reply_id去查询评论类、再同上的操作、就是最后set 入 评论返回类的 replyComments字段中就ok

以上是个人观点设计,若有不足的地方或更好的设计,欢迎提出。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/409111
推荐阅读
相关标签
  

闽ICP备14008679号