评论+回复的设计思路和实现

本文探讨了在类似微博的项目中如何设计和实现评论及回复功能。通过分析动态、评论和回复的关系,提出了优化的数据库设计方案,包括动态表、评论表和回复表。在查询和展示数据时,注意到需要解决回复层级展示的问题,通过递归查询解决了多级评论的显示,并强调了递归处理应在servlet中进行以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不知道大家有没有遇到类似于微博这种需要实现评论和回复的项目,如图:
在这里插入图片描述

那么在面对这种需求的时候,先想想数据库该如何设计。针对这个模块,涉及到的对象有:用户、动态、评论和回复,由于用户表只需要在这里绑定一个主键ID作为外键,就暂时先不考虑用户表的设计。接下来就对动态、评论和回复来分别设计数据表

动态表:动态ID、用户ID、动态内容、动态图片、发布时间
评论表:评论ID、用户ID、动态ID、评论内容、评论时间
回复表:回复ID、用户ID、动态ID、评论ID、回复内容、回复时间

发现问题没有?评论表和回复表的字段几乎是一样的。我们可以这样理解:【评论是对动态进行评论,而回复是对评论进行评论】,说白了就是,回复也是评论,那么为什么还要单独建一张回复表呢?那么我们来优化一下

动态表:动态ID、用户ID、动态内容、动态图片、发布时间
评论表:评论ID、用户ID、动态ID、评论内容、评论时间、评论ID2

这个评论ID2是什么情况?其实是这样的,评论ID2存放的数据也是评论ID,它指明了当前这条数据是针对哪条评论进行评论的。好像还是有点绕,咱们来画个图捋一捋。
在这里插入图片描述

这样子看上去也许更容易理解一点……
接下来正式开始建表

在这里插入图片描述
在这里插入图片描述
其他表就不多说了,把这几个基本的表建好之后,手动加几条数据,然后拉到项目中去,那么问题又来了,数据该怎么查?有同学肯定想到了,那不是有个动态ID吗?我们可以根据动态ID,将该动态下的所有评论都查出来。既然想到了,我们就来试试。

	public List<Comment> findCommentList(int trendsid) {
   
   
		// TODO Auto-generated method stub
		List<Comment> list = null;
		try {
   
   
			String sql = "select comment.*,user.username from comment inner join user on comment.userid=user.userid"
						+" where trendsid = ? order by commentdate desc";//查询的SQL语句,通过时间进行排序
			con=DbUtil.getConnection();
			ps=con.prepareStatement(sql);
			ps.setInt(1, trendsid);
			rs=ps.executeQuery();
			list=JdbcHelper.getResult(rs, Comment.class);//jdbcHelper封装的工具类,通过反射获取返回结果集
		} catch (SQLException e) {
   
   
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
   
   
			DbUtil.close(con, ps, rs);//关闭连接
		}
		return list;//返回结果列表
	}

在Dao中写好查询方法,获取到数据库返回的结果集,接下来就是返回给servlet和jsp。servlet也就那样,就不截出来了,下面是jsp的代码

function findComment(){
   
   
	$.ajaxSettings.async=false
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值