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

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

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

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

需要使用递归和链表进行循环遍历插入回复
设计如下:
Content.java


	private static final long serialVersionUID = 1L;

	@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<ContentDTO> children;
}

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

 <resultMap id="commentDTOMap" type="com.zukxu.items.comment.entity.ContentDTO">
        <id property="id" column="id"></id>
        <result property="nickname" column="nickname"></result>
        <result property="content" column="content"></result>
    
        <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": []
        }
      ]
    }
  ]

绝大多数时候我们都会去使用两层型的评论方式做评论

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

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

7493734)]
[外链图片转存中…(img-7zmpxgih-1715647493735)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

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

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐