模仿qq空间评论以及回复

news/2024/11/14 11:53:00/

先看需求是怎么样的:

再看评论表结构的设计:

 

create table t_comment
(id varchar(32) primary key, #主键Idcustomer_id varchar(32) not null, #用户Idparent_comment_id varchar(32) not null, #父评论Idcontent_id varchar(32) not null, #评论对象的Idtype int(11), #评论对象的类型content varchar(140) null, #评论内容comment_date varchar(10) null, #评论日期comment_time varchar(12) null, #评论时间state int(11) null #评论的状态 0显示或者1不显示
);


在看实体的设计:

 

 

	private String id;// idprivate String customerId;// 用户idprivate String parentCommentId;// 父评论idprivate String contentId;// 内容idprivate String content;// 评论内容private String commentDate;// 评论日期private String commentTime;// 评论时间private Integer state;// 评论的状态private Integer type;// 评论类型//=================================private List<Comment> replyComment; // 评论回复信息private Customer customer;// 评论者信息private Customer replyCustomer; // 回复评论的人

 

 

以上是Comment实体设计:省略了getter/setter

分析问题的解决方案,我先说说我解决问题的方案:

首先根据我们要评论的对象得Id,查询出评论该对象的所有父评论;

然后根据父评论的Id去查询子评论的信息。

 

分析完毕后:我们开始写sql:

下面的t_item 为评论对象中的一种类型, 他的类型码为1 所有tco.type = 1

 

SELECT tco.* FROM t_comment tco LEFT JOIN t_item tit ON tco.content_id = tit.idWHERE tco.parent_comment_id = 0AND tco.type = 1AND tco.state = 0AND tit.id = #{itemId}ORDER BY tco.comment_date DESC, tco.comment_time DESC


以上为查询所有的父评论信息;

 

然后我们再根据父评论的Id查询子评论的信息:

 

SELECT tco.* FROM t_comment tco WHERE tco.parent_comment_id = #{parentCommentId} AND tco.state = 0

 

以上是查询子评论的信息

通过上面的sql,我们只是简单的查询了语句:

我们在看看java中怎么去构建评论的集合

dao的编写:就是把以上的两个sql语句变成两个方法。

根据评论对象的Id查询所有父评论:List<Comment> findParentCommentByItemId(String itemId, int offset, int limit);

根据父评论的Id查询所有子评论:List<Comment> findReplyCommentByCommentId(String parentCommentId, int offset, int limit);

然后我们看service怎么实现:

根据评论对象的Id查询所有评论:List<Comment> findCommentByItemId(String itemId, int offset, int limit);

具体的实现:

 

public List<Comment> findCommentByItemId(String itemId, int offset, int limit) {List<Comment> comments = commentDao.findParentCommentByItemId(itemId, offset, limit);for(Comment comment : comments){List<Comment> replys = new ArrayList<Comment>(); // 实例化回复的集合comment.setReplyComment(replys); // 设置评论的回复集合String customerId = comment.getCustomerId(); // 获取评论的人的IdCustomer customer = customerService.getCustomerByCustomerId(customerId); // 通过评论人的Id获取评论人的信息comment.setCustomer(customer); // 设置评论的人的信息buildReplyComment(comment, replys, offset, limit); // 构建评论与回复信息}return comments;}

 

/*** 构建评论与回复评论的关系* @param comment* @param offset* @param limit*/private void buildReplyComment(Comment comment, List<Comment> replys, int offset, int limit){List<Comment> replyComments = commentDao.findReplyCommentByCommentId(comment.getId(), offset, limit); // 获取评论的所有回复replys.addAll(replyComments); // 把所有的回复添加到评论实例化的回复集合中for(Comment c : replyComments){ // 遍历回复中的回复String customerId = c.getCustomerId(); // 获取回复人的idCustomer replyCustomer = customerService.getCustomerByCustomerId(customerId); // 获取回复人信息Customer customer = customerService.getCustomerByCustomerId(comment.getCustomerId()); // 获取评论人的信息c.setCustomer(customer); // 设置评论人的信息c.setReplyCustomer(replyCustomer); // 设置回复人的信息buildReplyComment(c, replys, offset, limit); // 递归调用}}


最后看页面的展示:

 

 

<c:forEach var="comment" items="${itemComments}"><span class="ellipsis">【<c:out value="${comment.customer.nickName}" />】:</span>  <span class="ellipsis">${comment.content}</span><span class="ellipsis">(<c:out value="${comment.commentDate}" />)</span><br/><c:if test="${!empty comment.replyComment}"><c:forEach var="reply" items="${comment.replyComment}">  【${reply.replyCustomer.nickName}】回复了【${reply.customer.nickName}】<span class="ellipsis">${reply.content}</span><span class="ellipsis">(<c:out value="${comment.commentDate}" />)</span><br/></c:forEach></c:if></c:forEach>

 

 

 


样式方面需要调整,大体的功能就这个样子了,

 

 

 

还有不足请指出来,谢谢

 

 

 

 

 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/395571.html

相关文章

Android热修复技术——QQ空间补丁方案解析(2)

接下来的几篇博客我会用一个真实的demo来介绍如何实现热修复。具体的内容包括&#xff1a; 如何打包补丁包如何将通过ClassLoader加载补丁包 1. 创建Demo demo很简单&#xff0c;创建一个只有一个Activity的demo&#xff1a; package com.biyan.demo public class MainActi…

一键删除qq空间说说

var delay1 2500; var delay2 2200; var delay3 4000; var i 0; var next “#pager_next_”; function del() {try{document.querySelector(‘.app_canvas_frame’).contentDocument.querySelector(‘.del_btn’).click();setTimeout(“yes()”, delay2); }catch(err){nex…

QQ空间 安卓App热补丁动态修复技术介绍

【原文地址 点击打开链接】 【各自热修复框架介绍 点击打开链接】 【AndFix使用说明 AndFix使用说明】 AndFix与Nuwa对比 Nuwa是另一个热补丁框架&#xff0c;原理是基于QQ空间团队提出的安卓App热补丁动态修复技术介绍。 与Nuwa相比&#xff0c;AndFix有一下优点&#xf…

电脑修复损坏文件--修复命令;系统盘磁盘空间不足

目录 sfc/scannow--修复损坏的系统文件命令解析command parse步骤 命令修复磁盘&#xff1b;磁盘空间的释放输入“sfc /purgecache”命令&#xff08;不含双引号&#xff0c;下同&#xff09;输入“cleanmgr”命令输入“CHKDSK D:/F”&#xff0c;修复D驱动器号 sfc/scannow–修…

基于QQ空间热修复原理实践

基于QQ空间热修复原理实践 关于热修复技术&#xff0c;去年真是火的一塌糊涂&#xff0c;俺们没有及时赶上&#xff0c;好在现在赶上也不算晚&#xff0c;好了废话不多说&#xff0c;直接进入正题。 原理&#xff1a; 简单阐述一下&#xff0c;具体的还是看原文吧。 说白了…

QQ空间无法修改“空间描述”修复方法

今天修改QQ空间描述&#xff0c;提示对话框“用户信息更新失败&#xff01;”弄得我满处百度&#xff0c;几般尝试&#xff0c;可就是无法修改描述。结果&#xff0c;果断想起是不是没修改资料&#xff0c;跑去QQ个人中心官网&#xff0c;把星座那些刚才改生日自动填写的资料全…

QQ空间里面的照片变模糊了怎么办?时间越久越模糊怎么修复清晰?

很多人是不是都拿QQ空间当图片存档的地方&#xff0c;照片放进去你以为可以不管了&#xff0c;可以永久保存了&#xff01;哪知道图片越放越模糊&#xff0c;甚至10年前的照片居然全成了马赛克&#xff0c;根本看不清楚了&#xff0c;哭都没地方去。 网上许多网友在看为什么存…

QQ空间热修复原理深入解析

一、背景 App的上线发布是我们程序猿开心的事情,证明着一段时间来成果的进步和展现。但是随着App的上线手机App市场,接下来的更新维护工作便成了”家常便饭“。尤其是在创业公司,随着业务等不稳定性因素,前期App的更新工作更为频繁,可能两天一小改,三天一大改的情况经常发…