9.8 评论功能实现整理
这里以实现文章页面的评论列表为例
一、业务分析
模拟B站评论业务
1.1 业务逻辑
- 当访问某篇文章的时候,尝试获取该文章的评论列表。
- 按照文章评论配置(这些配置单独一张表,与文章一对一关系),进行分页展示相应的一级评论和二级评论。
- 对于一级评论,点击显示更多评论,显示该评论下的所有二级评论,并进行分页展示。
- 一级评论和二级评论均可根据文章配置按照热度或创建时间进行排序
1.2 实现思路
- 为评论添加一个父id指向父评论,添加一个回复id指向回复评论。
- 评论一共分为两层,分别为一级评论和二级评论。
- 一级评论的父id约定为0,二级评论的父评论指向一级评论。
- 回复id是针对于某一个以及评论下的二级评论之间进行的信息回复。
1.3 规则分析
- 一级评论父id都为0L
- 二级评论必须有父id,且不能为0L
- 二级评论不能回复其他父id下的二级评论
- 一级评论不能回复其他评论,其他评论也不能回复一级评论
二、表结构
2.1 comment
2.2 comment_settings
三、模型建立
使用Spring Data Jpa与数据库交互
3.1 Comment
Comment 模型内部维护User、回复User、子评论列表
@Entity
@Table(name = "comment")
public class Comment
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long articleId;
private Long userId;
private Long replayUserId;
private Long parentId;
private Integer likeNum = 0;
private String content;
@Column(updatable = false)
private Long createdAt;
@Transient
private User user;
@Transient
private User replayUser;
@Transient
private List<Comment> childrenComment;
3.2 CommentSettings
CommentSettings内部维护了文章配置信息
@Entity
@Table(name = "comment_settings")
public class CommentSettings
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long articleId;
@Convert(converter = SettingsInfoConverter.class)
private SettingsInfo settings;
}
3.3 SettingsInfo
public class SettingsInfo
{
private Byte requiredSignin = 0;
private Byte requiredReply = 0;
}