关于实现一个评论或者留言功能的思路(个人博客开发的实现思路)

关于博客


博客技术栈

  • 前端页面用的 Onestar GitHub 直接从GitHub拿下来使用了
  • 后端采用SpringBoot + Mybatis-plus + Thymleaf 快速开发

博客碰到的问题

  • 评论区功能的重构

    初期想实现的评论区功能 一个顶级的父评论和其下面所有的子评论共同组成一个板块 依次嵌套展示

    对评论的回复的人 以 @名称 的形式


对应的初期表设计结构 意采用树的形式存储评论 即每个评论存储他回复的评论的ID 看起来没有什么问题

初期代码实现

思路: 将顶级父评论下所有的子评论组装到集合中(即不论是一级还是二级或者三级评论都组装到顶级父评论的子集合中) 并赋予父亲评论的名称 再放到前端展示 这里用递归
    
     /**
     * 父评论所属全部子评论
     */
    @TableField(exist = false)//在数据库表中忽略此列
    private List<Comment> children;

//  用于临时存储一个父
private List<Comment> temp = new ArrayList<>();

public List<Comment> listComment(Long id) {

        QueryWrapper<Comment> wrapper = new QueryWrapper<>();
        wrapper.eq("blog_id",id).orderByDesc("create_time");;
        List<Comment> list = baseMapper.selectList(wrapper);

        //  拿到父评论集合
        List<Comment> pComments = commentList
            .stream()
            .filter(comment -> comment.getParentCommentId() == 0)
            .collect(Collectors.toList());

        //  收集所有父评论的 全部子评论
        for (Comment pComment : pComments) {
            //  调用查找所有子评论
            getChildren(pComment.getId(),pComment.getNickname());
            // 查找完毕 设置到集合中
            pComment.setChildren(temp);
            //  重新置空 提供给下一个父节点使用
            temp = new ArrayList<>();
        }
        return pComments;
    }

    /**
     * 递归查找所有子评论
     */
    public void children(List<Comment> list,Long pId,String pName){
        List<Comment> collect = list
            .stream()
            .filter(comment -> comment.getParentCommentId() == pId)
            .collect(Collectors.toList());
        
         //  判断是否含有子评论
        if(collect.size()>0){
            for (Comment comment : collect) {
                //  设置他回复的评论的名称 即 @名称
                comment.setPNickName(pName);
                //  添加到临时集合中
                temp.add(comment);
                //  继续递归查找
                children(list,comment.getId(),comment.getNickname());
            }
        }
    }

实现效果也很理想 至少展示和添加评论没有什么问题 但是当我想实现一个 删除留言评论的功能时 发现了问题所在

  • 由于数据库表设计时每个评论的父ID放的都是他回复评论的父ID 而想删除时 如果当前子评论还有子评论 即一级评论有二级回复 当你想删除一级评论时 就会导致二级回复丢失 因为无法找到其父评论ID 再观察哔哩哔哩的评论功能时候发现是具备删除单个评论的功能的 于是就想办法解决

解决办法 增加一个字段 存储他回复的直接评论 的 评论昵称

parent_message_id 存放最顶级的父评论ID

这样展示的时候 既不需要递归查找组装(因为就是属于他的直接子评论) 也不需要手动的去赋值父评论的名称

 //  直接查找当前顶级父评论下的所有子评论 然后展示即可 即使删除评论 也无关紧要 因为是根据顶级父评论来查找评论的 且回复的评论名称已经用字段存储了   
 
public List<Comment> listComment(Long id) {

        QueryWrapper<Comment> wrapper = new QueryWrapper<>();
        wrapper.eq("blog_id",id).orderByDesc("create_time");;
        List<Comment> list = baseMapper.selectList(wrapper);
        //  拿到父评论集合
        List<Comment> pComments = list
                .stream()
                .filter(comment -> comment.getParentCommentId() == 0)
                .collect(Collectors.toList());
       //  组装子评论
        for (Comment pComment : pComments) {
            List<Comment> collect = list.stream()
                    .filter(comment -> pComment.getId().equals(comment.getParentCommentId()))
                    .collect(Collectors.toList());
            pComment.setChildren(collect);
        }
        
        return pComments;
    }
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 好的,我可以为您提供一套 Java 博客的思路。 1. 首先,需要确定博客的主题。是想分享技术经验,还是想展示自己的项目?明确了博客的主题之后,就可以开始准备内容了。 2. 准备内容时,需要注意以下几点: - 内容应该具有可读性。尽量使用简洁明了的语言,并使用图片、代码片段等工具来帮助读者理解。 - 内容应该有趣。如果博客的内容太乏味,很难吸引读者的眼球。 - 内容应该有价值。博客的内容应该能够帮助读者学习新知识,解决问题或者获得某些价值。 3. 在准备好内容之后,就可以开始搭建博客了。这里有几种选择: - 使用现成的博客系统,例如 WordPress、Jekyll 等。这种方式可以节省很多时间,但是需要注意的是,这些系统可能会有一些功能限制。 - 自己搭建博客系统。如果想要定制化更高,可以考虑自己开发博客系统。这种方式可能需要较长的时间,但是可以满足个性化的需求。 4. 最后,就是发布博 ### 回答2: 搭建一套Java博客系统可以分为以下几个步骤: 1. 确定需求和功能:首先需要明确博客系统的需求和功能,包括博客的基本展示功能、用户的注册登录功能、文章的发布、评论功能等。根据需求和功能确定项目的规模和复杂度。 2. 搭建开发环境:选择合适的Java开发工具和数据库,例如Eclipse或IntelliJ IDEA作为开发IDE,MySQL或Oracle作为数据库。搭建好开发环境。 3. 设计数据库结构:根据需求和功能,设计博客系统的数据库结构。包括用户表、文章表、评论表、分类表等。确定表的字段、数据类型和关联。 4. 创建项目:创建一个Java Web项目,用于开发实现博客系统。选择合适的框架,例如Spring MVC或Spring Boot进行开发。创建项目的目录结构,引入相关依赖。 5. 设计和实现前端页面:设计和实现博客系统的前端页面,包括首页展示、文章详情页、登录注册页等。使用HTML、CSS、JavaScript等技术进行前端开发,并与后端进行数据交互。 6. 实现后端逻辑:根据需求和功能实现后端逻辑。包括用户的注册登录逻辑、文章的增删改查逻辑、评论的增删改查逻辑等。使用Java编程语言和相应的框架进行开发。 7. 数据库操作:在后端代码中实现数据库的增删改查操作,使用JDBC或ORM框架进行数据库操作。与数据库建立连接,执行SQL语句,操作数据库表中的数据。 8. 测试和调试:进行系统的测试和调试,确保系统的功能正常运行。对各个功能模块进行测试,修复bug和错误,保证系统的稳定性和可靠性。 9. 部署和发布:完成开发和测试后,将博客系统部署到服务器上。配置服务器环境,安装Java相关软件,上传代码和资源文件。通过域名或IP地址访问博客系统,发布正式版本。 10. 维护和优化:博客系统上线后,需要进行维护和优化。定期备份数据,定期关注服务器的性能和安全,处理用户的反馈和问题。根据用户的需求和反馈,进行系统的优化和升级。 以上是搭建一套Java博客系统的基本思路,根据具体的需求和技术栈的选择,可能会有所不同。同时,也可结合Java的开源框架和工具进行快速开发实现部分功能。 ### 回答3: 搭建一套Java博客的思路如下: 1. 确定需求:首先明确博客的功能需求,如发布博文、查看博文、留言评论、用户登录等。 2. 选择技术栈:根据需求选择合适的技术栈,一般可以选择使用Java语言开发后端,并搭配Spring框架、Spring MVC或Spring Boot等。数据库可以选择使用MySQL、PostgreSQL等。 3. 构建数据库:设计并创建数据库,包括博文表、用户表、评论表等,根据需求创建对应的字段。 4. 搭建后端:使用Java开发后端,用于处理前端请求、实现业务逻辑。可以使用Spring框架进行依赖注入、控制反转等,使用Spring MVC或Spring Boot进行请求路由和响应处理。 5. 实现博文功能:根据需求,实现博文的发布、编辑、删除等功能。可以定义博文实体类,编写相关的Controller、Service和Dao层代码,实现对数据库的增删改查操作。 6. 实现用户功能实现用户的注册、登录、注销等功能。可以使用Spring Security等安全框架进行用户认证和授权,确保用户信息的安全性。 7. 前端开发:使用HTML、CSS和JavaScript等前端技术实现用户界面。可以使用前端框架如Vue.js、React或Angular进行开发实现页面的交互和样式的美化。 8. 实现评论功能:根据需求,实现评论功能,用户可以在博文下方添加评论并查看其他用户的评论。可以定义评论实体类,编写相关的Controller、Service和Dao层代码。 9. 部署上线:配置服务器环境,将数据库和后端代码部署到服务器上,并进行测试。可以选择使用Nginx进行反向代理、负载均衡等。 10. 迭代优化:根据用户反馈和需求的变化,不断优化博客系统,修复bug,并添加新的功能或模块。 以上就是搭建一套Java博客的基本思路,当然具体的实现细节还需要根据需求来定。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值