評論回覆功能,總結開發-Java
評論回覆功能,總結開發-Java
上一篇文章是將所有的評論和回覆整合到一張表中,只能支援一級評論和回覆,不能對別人的回覆進行回覆
所以這次將評論和回覆劃分出來,分為兩張表,分別是評論表和回覆表
Comment表和 Reply表
表格設計
Comment表
-- auto-generated definition
create table comment
(
id bigint not null
constraint comment_pk
primary key,
uid varchar(255),
uname varchar(50),
content text,
create_time timestamp
);
comment on table comment is '評論表';
comment on column comment.id is '主鍵id';
comment on column comment.uid is '使用者id';
comment on column comment.uname is '使用者名稱';
comment on column comment.content is '評論內容';
comment on column comment.create_time is '評論時間';
alter table comment
owner to postgres;
Reply表
-- auto-generated definition
create table reply
(
id bigint not null
constraint reply_pk
primary key,
tr_id bigint,
tr_status integer default 0,
uid varchar(255),
uname varchar(50),
rcontent text,
create_time timestamp
);
comment on table reply is '回覆表';
comment on column reply.id is '主鍵id';
comment on column reply.tr_id is '回覆的id';
comment on column reply.tr_status is '是回覆還是評論,0表示回覆評論,1表示回覆回覆';
comment on column reply.uid is '使用者id';
comment on column reply.uname is '使用者名稱';
comment on column reply.rcontent is '回覆內容';
comment on column reply.create_time is '建立時間';
alter table reply
owner to postgres;
實體類和連結串列類
實體類
comment類
@Data
@TableName(value = "comment")
public class Comment implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主鍵id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 使用者id
*/
@TableField(value = "uid")
private String uid;
/**
* 使用者名稱
*/
@TableField(value = "uname")
private String uname;
/**
* 評論內容
*/
@TableField(value = "content")
private String content;
/**
* 評論時間
*/
@TableField(value = "create_time")
private LocalDateTime createTime;
}
CommentNode類
@Data
public class CommentNode {
private Comment comment;
private List<ReplyNode> replyNodes = new ArrayList<>();
}
Reply類
@Data
@TableName(value = "reply")
public class Reply implements Serializable {
/**
* 主鍵id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 評論或者回復id
*/
@TableField(value = "tr_id")
private Long trId;
/**
* 是回覆還是評論,0表示回覆評論,1表示回覆回覆
*/
@TableField(value = "tr_status")
private Integer trStatus;
/**
* 使用者id
*/
@TableField(value = "uid")
private String uid;
/**
* 使用者名稱
*/
@TableField(value = "uname")
private String uname;
/**
* 回覆內容
*/
@TableField(value = "rcontent")
private String rcontent;
/**
* 建立時間
*/
@TableField(value = "create_time")
private LocalDateTime createTime;
private static final long serialVersionUID = 1L;
}
ReplyNode類
@Data
public class ReplyNode {
private Reply reply;
private List<ReplyNode> replyNodes = new ArrayList<>();
}
我們的整體設計思路是取出一級評論,在使用連結串列的形式,使用遞迴去查詢該評論或者該回復是否含有回覆,如果有就插入,沒有就結束
@Override
public List<Comment> findAll() {
return commentMapper.selectList(new QueryWrapper<>());
}
@Override
public List<CommentNode> pageInfo() {
//得到所有評論
List<Comment> commentList = findAll();
//裝下所有評論的List
List<CommentNode> commentNodes = new ArrayList<>();
for (Comment comment : commentList) {
CommentNode commentNode = new CommentNode();
//把每個Comment變成CommentNode
commentNode.setComment(comment);
//獲取評論ID
Long id = comment.getId();
//找到是這個評論的所有回覆
List<Reply> thisReplyList = replyService.findAllById(id);
//遍歷每個第一層回覆
for (Reply re : thisReplyList) {
ReplyNode replayNode = new ReplyNode();
replayNode.setReply(re);
commentNode.getReplyNodes().add(replayNode);
//得到回覆的回覆
List<Reply> replayList = replyService.findAllByTrid(re.getTrId());
//遞迴
addReplyNode(replayList, replayNode);
}
commentNodes.add(commentNode);
}
return commentNodes;
}
/**
* 插入連結串列 引數分別代表需要待插入的節點list 和這些節點的父親是誰
*/
public void addReplyNode(List<Reply> replyList, ReplyNode node) {
//為空就直接返回
if (replyList.isEmpty()) {
return;
}
//挨個遍歷list中的節點資訊,然後如果節點還有孩子就繼續遞迴
for (Reply re : replyList) {
ReplyNode replyNode = new ReplyNode();
replyNode.setReply(re);
node.getReplyNodes().add(replyNode);
List<Reply> replayList = replyService.findAllByTrid(re.getId());
//有孩子就繼續遞迴
addReplyNode(replayList, replyNode);
}
}
相關文章
- Java實現評論回覆功能Java
- 評論功能完成,順便總結下開發評論的經驗
- 評論模組開發總結
- 資料庫設計——評論回覆功能資料庫
- WordPress增加評論回覆的郵件通知功能
- PHP無限級評論回覆功能實現PHP
- [打怪升級]小程式評論回覆和發貼功能實戰(一)
- [打怪升級]小程式評論回覆和發帖功能實戰(二)
- 文章評論功能前後端實現方案總結後端
- 關於實現論壇的回覆評論
- 微信公眾平臺開發(十) 訊息回覆總結
- 影片號直播自動迴圈發評論-自動回覆評論 - 瀏覽器外掛瀏覽器
- Thinkphp帶表情的評論回覆例項PHP
- Android 開發功能模組總結Android
- 論壇有郵件回覆通知功能嗎?
- 微信公眾平臺開發(四) 簡單回覆功能開發
- 專案總監的方法論總結——點評
- Java開發手冊精華總結Java
- 微信小程式--仿朋友圈Pro(內容釋出、點贊、評論、回覆評論)微信小程式
- react 學習--結合bootstrap實現評論功能Reactboot
- 4.PHP微信公眾平臺開發 - 簡單回覆功能開發PHP
- 淘寶直播自動回覆評論 - 瀏覽器外掛瀏覽器
- kotlin和java混合開發總結KotlinJava
- iOS開發之誘導使用者為自己的App評論功能iOSAPP
- Java反射機制開發經驗總結Java反射
- java開發一個應用的總結Java
- 客服系統配置抖音開放平臺,實現授權登入回覆私信和評論 實現授權登入,為授權使用者管理回覆私信和評論
- 開發總結
- PHP+MySQL設計高效發表評論留言功能PHPMySql
- 個人部落格開發系列:評論功能之GitHub賬號OAuth授權GithubOAuth
- 抖音評論自動回覆固定話語,抖音私信企業多員工號統一接待回覆
- 抖音私信客服系統 - 對接抖音私信統一接待回覆 -以及私信或評論自動回覆
- 回覆女朋友朋友圈自拍照的甜蜜評論
- 2年Java開發工作經驗面試總結Java面試
- 阿里JAVA開發面試常問問題總結阿里Java面試
- 一個JAVA開發一年的總結Java
- 開發中總結
- 微信開發總結