java递归实现无限制多级评论
-
SQL
CREATE TABLE `comment_dto` ( `id` int(11) NOT NULL, `parent_id` int(11) NULL DEFAULT NULL COMMENT '上级评论ID', `blog_id` int(11) NULL DEFAULT NULL COMMENT '文章ID', `account_Id` int(11) NULL DEFAULT NULL COMMENT '评论者ID', `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '评论内容', `create_time` timestamp(0) NULL DEFAULT NULL COMMENT '创建时间', `comment_status` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否是最上级评论0:是,1:不是', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of comment_dto -- ---------------------------- INSERT INTO `comment_dto` VALUES (1, 0, 1, 2, '这是一级评论', '2021-07-01 11:28:10', '0'); INSERT INTO `comment_dto` VALUES (2, 1, 1, 2, '这是二级评论', '2021-07-01 11:28:46', '1'); INSERT INTO `comment_dto` VALUES (3, 1, 1, 2, '这是二级评论', '2021-07-01 11:29:46', '1'); INSERT INTO `comment_dto` VALUES (4, 1, 1, 2, '这是二级评论', '2021-07-01 11:30:46', '1'); INSERT INTO `comment_dto` VALUES (5, 2, 1, 2, '这是三级评论', '2021-07-01 12:30:46', '1'); INSERT INTO `comment_dto` VALUES (6, 5, 1, 2, '这是四级评论', '2021-07-01 13:30:46', '1');
-
Mapper
<select id="getCommentByBlogId" resultType="CommentDto" parameterType="Integer"> SELECT bc.`blog_id` as blogId,bc.`parent_id` as parentId,bc.`id`, bc.`account_id` as accountId,bc.`content` as content,bc.`create_time` as date FROM comment_dto bc WHERE bc.`blog_id` = #{blogId} AND bc.`comment_status` = 0; </select> <select id="getCommentByParentId" resultType="CommentDto" parameterType="Integer"> SELECT bc.`blog_id` as blogId,bc.`id`,bc.`account_id` AS accountId, bc.`content` AS content, bc.`create_time` AS DATE, bc.`parent_id` AS parentId FROM comment_dto bc WHERE bc.`parent_id` = #{parentId} AND bc.`comment_status` != 0; </select>
-
Mapper接口
List<CommentDto> getCommentByBlogId(Integer blogId); List<CommentDto> getCommentByParentId(Integer parentId);
-
model
public class CommentDto { /** * 主键 */ private Integer id; /** * 评论者 */ private Integer accountId; /** * 上级评论 */ private Integer parentId; /** * 文章 */ private Integer blogId; /** * 评论内容 */ private String content; /** * 下级评论 */ private List<CommentDto> sons; /** * 发生日期 */ private String date; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getAccountId() { return accountId; } public void setAccountId(Integer accountId) { this.accountId = accountId; } public Integer getParentId() { return parentId; } public void setParentId(Integer parentId) { this.parentId = parentId; } public Integer getBlogId() { return blogId; } public void setBlogId(Integer blogId) { this.blogId = blogId; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public List<CommentDto> getSons() { return sons; } public void setSons(List<CommentDto> sons) { this.sons = sons; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } }
-
service
@Autowired private RemarkOnMapper commentMapper; public List<CommentDto> getAllCommentByBlogId(Integer blogId) { List<CommentDto> commentVos = this.commentMapper.getCommentByBlogId(blogId); List<CommentDto> sons = getSons(commentVos); return sons; } private List<CommentDto> getSons(Integer parentId){ return this.commentMapper.getCommentByParentId(parentId); } private List<CommentDto> getSons(List<CommentDto> parents){ if(parents == null || parents.size() == 0){ return null; } for (CommentDto parent : parents) { int parentId = parent.getId(); List<CommentDto> sonCommentVos = getSons(parentId); //递归找子评论 parent.setSons(getSons(sonCommentVos)); } return parents; }
-
controller
@Autowired RemarkOnService ros; @ResponseBody @CrossOrigin(origins = "*") @RequestMapping(value = "/ROC/gbb", method = RequestMethod.GET, produces = "application/json;charset=UTF-8") public M<List<CommentDto>> getBlogById(@RequestParam("blogId")Integer blogId){ return M.succeed(ros.getAllCommentByBlogId(blogId)); }
-
结果
{ "start": "请求成功", "errMsg": "", "target": [{ "id": 1, "accountId": 2, "parentId": 0, "blogId": 1, "content": "这是一级评论", "sons": [{ "id": 2, "accountId": 2, "parentId": 1, "blogId": 1, "content": "这是二级评论", "sons": [{ "id": 5, "accountId": 2, "parentId": 2, "blogId": 1, "content": "这是三级评论", "sons": [{ "id": 6, "accountId": 2, "parentId": 5, "blogId": 1, "content": "这是四级评论", "sons": null, "date": "2021-07-01 13:30:46.0" }], "date": "2021-07-01 12:30:46.0" }], "date": "2021-07-01 11:28:46.0" }, { "id": 3, "accountId": 2, "parentId": 1, "blogId": 1, "content": "这是二级评论", "sons": null, "date": "2021-07-01 11:29:46.0" }, { "id": 4, "accountId": 2, "parentId": 1, "blogId": 1, "content": "这是二级评论", "sons": null, "date": "2021-07-01 11:30:46.0" }], "date": "2021-07-01 11:28:10.0" }], "code": 1 }
参考博客链接:
[https://blog.csdn.net/GDUT_Trim/article/details/115702508?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-7.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-7.control]: