SpringBoot和Mybatis实现评论楼中楼功能(一张表搞定,含源码

}

}

6. 接口实现类

逻辑都在接口实现类CommentServiceImpl里面实现,咱们来梳理一下逻辑(逻辑没梳理好,代码永远都是乱的,逻辑是第一步!!!),添加评论直接insert就可以了,这里主要讲一下查询:

  1. 根据id为“-1”查询出所有父评论

  2. 根据父评论的id查询出一级子回复

  3. 根据子回复的id循环迭代查询出所有子集回复

  4. 将查询出来的子回复放到一个集合中

要注意将父评论的姓名给set进去,代码如下:

package com.star.service.impl;

import com.star.dao.CommentDao;

import com.star.entity.Comment;

import com.star.service.CommentService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

/**

  • @Description:

  • @Date: Created in 13:44 2020/4/14

  • @Author: ONESTAR

  • @QQ: 316392836

  • @URL: https://onestar.newstar.net.cn/

*/

@Service

public class CommentServiceImpl implements CommentService {

@Autowired

private CommentDao commentDao;

//存放迭代找出的所有子代的集合

private List tempReplys = new ArrayList<>();

/**

  • @Description: 查询评论

  • @Auther: ONESTAR

  • @Date: 17:26 2020/4/14

  • @Param:

  • @Return: 评论消息

*/

@Override

public List listComment() {

//查询出父节点

List comments = commentDao.findByParentIdNull(Long.parseLong(“-1”));

for(Comment comment : comments){

Long id = comment.getId();

String parentNickname1 = comment.getNickname();

List childComments = commentDao.findByParentIdNotNull(id);

//查询出子评论

combineChildren(childComments, parentNickname1);

comment.setReplyComments(tempReplys);

tempReplys = new ArrayList<>();

}

return comments;

}

/**

  • @Description: 查询出子评论

  • @Auther: ONESTAR

  • @Date: 17:31 2020/4/14

  • @Param: childComments:所有子评论

  • @Param: parentNickname1:父评论的姓名

  • @Return:

*/

private void combineChildren(List childComments, String parentNickname1) {

//判断是否有一级子回复

if(childComments.size() > 0){

//循环找出子评论的id

for(Comment childComment : childComments){

String parentNickname = childComment.getNickname();

childComment.setParentNickname(parentNickname1);

tempReplys.add(childComment);

Long childId = childComment.getId();

//查询二级以及所有子集回复

recursively(childId, parentNickname);

}

}

}

/**

  • @Description: 循环迭代找出子集回复

  • @Auther: ONESTAR

  • @Date: 17:33 2020/4/14

  • @Param: childId:子评论的id

  • @Param: parentNickname1:子评论的姓名

  • @Return:

*/

private void recursively(Long childId, String parentNickname1) {

//根据子一级评论的id找到子二级评论

List replayComments = commentDao.findByReplayId(childId);

if(replayComments.size() > 0){

for(Comment replayComment : replayComments){

String parentNickname = replayComment.getNickname();

replayComment.setParentNickname(parentNickname1);

Long replayId = replayComment.getId();

tempReplys.add(replayComment);

//循环迭代找出子集回复

recursively(replayId,parentNickname);

}

}

}

@Override

//存储评论信息

public int saveComment(Comment comment) {

comment.setCreateTime(new Date());

return commentDao.saveComment(comment);

}

}

7. 前端页面comment.html

最后是前端显示页面,这里采用semantic-ui作为UI组件,使用thymeleaf模板解析,记得在static文件夹下创建images文件夹,并放一张名为avatar.png的图片

评论楼中楼功能

评论

小红

Today at 5:42PM

愿你走出半生,归来仍是少年!

回复

小白

 @ 小红

Today at 5:42PM

你也是!

回复

发布

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值