2024年最新评论回复功能设计与总结-Java(两层型)_评论回复通用设计(3),物联网嵌入式开发资深架构师分享学习经验及总结

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

@ApiModelProperty(value = "主键id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Integer id;

@ApiModelProperty(value = "用户昵称")
@TableField("nickname")
private String nickname;

@ApiModelProperty(value = "头像")
@TableField("avatar")
private String avatar;

@ApiModelProperty(value = "评论")
@TableField("comment")
private String comment;

@ApiModelProperty(value = "博客id ")
@TableField("blog\_id")
private Integer blogId;

@ApiModelProperty(value = "回复评论id")
@TableField("parent\_id")
private Integer parentId;

* DTO设计  
 ContentDTO.java



@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ApiModel(value = “评论模型”)
@JsonIgnoreProperties(value = { “handler” })
public class ContentDTO {
private int id;
private String nickname;
private String content;
private List children;
}


使用mybatis做为持久层框架,编写sql查询语句进行嵌套查询,



    <association property="children"
                 select="com.zukxu.items.comment.mapper.ContentMapper.selectCommentById" column="{blogId=blog\_id,parentId=id}"
                 fetchType="lazy">
    </association>
</resultMap>

<select id="selectCommentById" resultMap="commentDTOMap">
    SELECT comment_id,nickname,content,blog_id,parent_id FROM blog WHERE blog_id = #{blogId} AND parent\_id = #{parentId}
</select>

结果如下:



[
{
“id”: “1309302063977304065”,
“nickname”: “1”,
“content”: “这次该可以了吧”,
“children”: [
{
“id”: “1309319425866698753”,
“nickname”: “1”,
“content”: “好了?”,
“children”: []
}
]
},
{
“id”: “1309341283121154994”,
“nickname”: “4”,
“content”: “为什么呢”,
“children”: [
{
“id”: “1309373849414787073”,
“nickname”: “1”,
“content”: “好了?”,
“children”: []
},
{
“id”: “1309308402422091778”,
“nickname”: “1”,
“content”: “可以了吧”,
“children”: []
},
{
“id”: “1309373675783184385”,
“nickname”: “1”,
“content”: “好了?”,
“children”: [
{
“id”: “1309373886580514817”,
“nickname”: “1”,
“content”: “???”,
“children”: []
}
]
}
]
}
]


结果会造成多重嵌套,不是很友好


### 3、两层型


比单一型多了互动的功能,比嵌套型更加简洁,方便操作管理  
 设计和嵌套型保持一致,只需要在查询出来数据之后对数据进行处理即可  
 将嵌套型转为两层型结构


处理每个父级评论的子级及其嵌套子级



public List<CommentDTO> findParent(List<CommentDTO> comments) {

    for (CommentDTO comment : comments) {

        // 防止checkForComodification(),而建立一个新集合
        ArrayList<CommentDTO> fatherChildren = new ArrayList<>();

        // 递归处理子级的回复,即回复内有回复
        findChildren(comment, fatherChildren);

        // 将递归处理后的集合放回父级的孩子中
        comment.setChildren(fatherChildren);
    }
    return comments;
}

public void findChildren(CommentDTO parent, List<CommentDTO> fatherChildren) {

    // 找出直接子级
    List<CommentDTO> comments = parent.getChildren();

    // 遍历直接子级的子级
    for (CommentDTO comment : comments) {

        // 若非空,则还有子级,递归
        if (!comment.getChildren().isEmpty()) {
            findChildren(comment, fatherChildren);
        }

        // 已经到了最底层的嵌套关系,将该回复放入新建立的集合
        fatherChildren.add(comment);

        // 容易忽略的地方:将相对底层的子级放入新建立的集合之后
        // 则表示解除了嵌套关系,对应的其父级的子级应该设为空
        comment.setChildren(new ArrayList<>());
    }
}

}


最后的结果如下:



[
{
“id”: “1309302063977304065”,
“userId”: “1”,
“comment”: “这次该可以了吧”,
“children”: [
{
“id”: “1309319425866698753”,
“userId”: “1”,
“comment”: “好了?”,
“children”: []
}
]
},
{
“id”: “1309341283121154994”,
“userId”: “4”,
“comment”: “为什么呢”,
“children”: [
{
“id”: “1309373849414787073”,
“userId”: “1”,
“comment”: “好了?”,
“children”: []
},
{
“id”: “1309308402422091778”,
“userId”: “1”,
“comment”: “可以了吧”,
“children”: []
},
{
“id”: “1309373886580514817”,
“userId”: “1”,
“comment”: “???”,
“children”: []
},
{
“id”: “1309373675783184385”,
“userId”: “1”,
“comment”: “好了?”,
“children”: []
}
]
}
]


绝大多数时候我们都会去使用两层型的评论方式做评论  
 具体实现就是mapper.xml文件之中的mybatis嵌套查询  
 和serviceImpl实现层之中的递归整合,代码思路很简单,希望能对有需要的朋友有所帮助


两层型的评论功能代码在这里,有需要的朋友可以去看看  
 [两层评论模型](https://bbs.csdn.net/topics/618679757)


## 附录:



**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/ed6b31bfe45817b259bdbc4b0e16846d.png)
![img](https://i-blog.csdnimg.cn/blog_migrate/e4d92c67adb0e3b29d829a7901104406.png)

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

升的朋友。**
[外链图片转存中...(img-vufND7FP-1715647451705)]
[外链图片转存中...(img-v8C7wfLf-1715647451706)]

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值