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

你也是!

回复

发布

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
核心功能 文章/图片/视频发布、喜欢、统计阅读次数。 文章标签tag功能、支持按tag分类 文章支持ueditor/markdown编辑器切换(后台配置) 评论功能,支持回复,支持情。 第三方(微博、QQ)登录。 lucene实现的站内搜索。 响应式布局 支持用户订阅 先看效果图 SpringBoot开发非常美观的java博客系统(包后台管理功能) SpringBoot开发非常美观的java博客系统(包后台管理功能) SpringBoot开发非常美观的java博客系统(包后台管理功能) http://localhost:8080/admin/group/list SpringBoot开发非常美观的java博客系统(包后台管理功能) SpringBoot开发非常美观的java博客系统(包后台管理功能)SpringBoot开发非常美观的java博客系统(包后台管理功能) 技术选型: JDK8 数据库MySQL 主框架 (Spring-bootSpring-data-jpa) 安全权限 Shiro 搜索工具 Lucene 缓存 Ehcache 视图模板 Freemarker 其它 Jsoup、fastjson jQuery、Seajs Bootstrap 前端框架 UEditor/Markdown编辑器 font-Awesome 字体/图标 准备工作(sql文件在项目里面) 安装 Jdk8 安装 Maven 准备 IDE (如果你不看源码,可以忽略下面的步骤,直接通过Maven编译war包:mvn clean package -DskipTests) IDE 需要配置的东西 编码方式设为UTF-8 配置Maven 设置Jdk8 关于这些配置,网上有一大把的资料,所以此处不再重复。 获取代码导入到IDE 下载代码 导入到IDE的时候请选择以Maven的方式导入 项目配置参考 系统配置手册 配置完毕 启动项目,在控制台看到Mblog加载完毕的信息后,示启动成功 打开浏览器输入:http//localhost/mblog/ (此处仅是示例,具体具体端口因人而异),访问成功即部署完毕 后台管理的地址是 /admin, 如果你是管理员账号点导航栏的头像会看到"后台管理" 启动成功后,你应该去后台的系统配置里配置你的网站信息等。 常见问题总结 进入系统后, 菜单加载不出来, 那应该是你没有导 db_init.sql 点标签显示乱码, 请设置Tomcat的 URIEncoding 为 UTF-8 项目截图 SpringBoot开发非常美观的java博客系统(包后台管理功能) 转自:https://gitee.com/mtons/mblog SpringBoot开发非常美观的java博客系统(包后台管理功能) 注意: 一、java main方式运行mblog-web下的BootApplication.java时抛出异常的解决方案 Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. SpringBoot开发非常美观的java博客系统(包后台管理功能) 注释掉后下面图片的这段后,记得maven要重新reimport SpringBoot开发非常美观的java博客系统(包后台管理功能) SpringBoot开发非常美观的java博客系统(包后台管理功能) 否则maven依赖不生效还是会抛出以上的异常 二、第三方登录点击后无响应,那是因为第三方开放平台回调的url失效导致,需要你去对应的第三方开放平台注册app后获取对应的oauth帐号 SpringBoot开发非常美观的java博客系统(包后台管理功能) 三、idea以maven项目导入该项目后,发现没有maven的依赖包时,需要对每个maven module进行clear和install,并且注意maven的依赖顺序 SpringBoot开发非常美观的java博客系统(包后台管理功能) SpringBoot开发非常美观的java博客系统(包后台管理功能) 四、访问地址是http://localhost:8080 登录时,帐号,密码只要自己找个密码,然后md5下在更新到db中即可登录成功。 比如:zuidaima 111111,md5后密码是 3931MUEQD1939MQMLM4AISPVNE,md5的java类 SpringBoot开发非常美观的java博客系统(包后台管理功能) SpringBoot开发非常美观的java博客系统(包后台管理功能)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值