最近实现了评论和回复、点赞、@的功能。在这里分享一下我的设计思路(先分享评论和回复功能)。希望各位读者给出一些不一样的建议后期改进。

效果展示

总共是两层回复 (回复评论、回复评论下的回复)

数据库设计

评论表(TFW_Comments)和回复内容表(TFW_UserResponse)以及评论回复关系表(TFW_MsgRelation)

数据库设计思路:

注:各位读者自动忽略评论表的服务机构ID字段,这个字段相当于这条评论是在哪个帖子(文章下面)

1、根据文章ID或者是帖子ID查询评论表获取评论(本文的服务机构ID)。第一层(评论)

2、根据评论ID并且回复类型等于1的去关系表获取第二层的回复(commentsId)。第二层(评论下的回复)

3、根据评论ID、回复类型等于2、回复ID去关系表获取第三层回复。第三层(评论下回复中的回复)注:回复ID是它的上级

实现类源码

@Overridepublic Map<String, Object> findComments(JSONObject jsonObject) {data.clear();String userId = jsonObject.getString("userId");String role = this.role(jsonObject);if (role.equals("-1")){//没有权限data.put("error","-1");data.put("msg","当前用户没有权限");return data;}List<Map<String, Object>> info = commentsDao.findComment(jsonObject.getString("fWJLID"),null);//查询点赞次数int countTag = 0;MsgRelationTag msgRelationTag = new MsgRelationTag();for (Map item : info){item.put("inputShow",false);int commentsId = (int) item.get("commentsId");//查询点赞次数countTag = msgRelationDao.findCountTagByTagId(commentsId,1);item.put("countTag",countTag);//设置点赞状态msgRelationTag.setTagId(commentsId);msgRelationTag.setTagType(1);msgRelationTag.setTagUserId(Integer.parseInt(userId));MsgRelationTag msgTag = msgRelationDao.findMsgTag(msgRelationTag);if (msgTag != null) {item.put("tagStatus",msgTag.getStatus());}else {item.put("tagStatus","");}//如果有@idif (item.get("atId") != null){String content = item.get("content").toString();StringBuffer tmrAtId = findUserName(item.get("atId").toString());item.put("content",content+'@'+tmrAtId);}//二级回复数据List<Map<String, Object>> twoReply = new ArrayList<>();//所有数据List<Map<String, Object>> userResponse = userResponseDao.findUserResponse(commentsId, null, "","",null);for (Map userResponseInfo :userResponse){int userResponseIds = Integer.parseInt(userResponseInfo.get("userResponseId").toString());//查询点赞次数countTag = msgRelationDao.findCountTagByTagId(userResponseIds,2);//设置点赞状态msgRelationTag.setTagId(userResponseIds);msgRelationTag.setTagType(2);msgTag = msgRelationDao.findMsgTag(msgRelationTag);if (msgTag != null) {userResponseInfo.put("tagStatus",msgTag.getStatus());}else {userResponseInfo.put("tagStatus","");}userResponseInfo.put("countTag",countTag);userResponseInfo.put("inputShow",false);Integer responseType = (Integer) userResponseInfo.get("responseType");for (Map stairReplyInfo : userResponse){Integer  userResponseId = (Integer) stairReplyInfo.get("userResponseId");int msgRelationId = Integer.parseInt(stairReplyInfo.get("msgRelationId").toString());//接受者id*/twoReply = userResponseDao.findUserResponse(msgRelationId, userResponseId,"1","",null); //二级回复数据for (Map twoReplyItem : twoReply){int twoReplyId = Integer.parseInt(twoReplyItem.get("userResponseId").toString());twoReplyItem.put("inputShow",false);//查询点赞次数countTag = msgRelationDao.findCountTagByTagId(twoReplyId,2);twoReplyItem.put("countTag",countTag);//设置点赞状态msgRelationTag.setTagId(twoReplyId);msgTag = msgRelationDao.findMsgTag(msgRelationTag);if (msgTag != null) {twoReplyItem.put("tagStatus",msgTag.getStatus());}else {twoReplyItem.put("tagStatus","");}String userRepContent = twoReplyItem.get("userRepContent").toString();if (twoReplyItem.get("tmrAtId") != null){StringBuffer tmrAtId = findUserName(twoReplyItem.get("tmrAtId").toString());twoReplyItem.put("userRepContent",userRepContent+'@'+tmrAtId);}}stairReplyInfo.put("twoReply",twoReply);}}item.put("stairReply",userResponse);}data.put("data",info);data.put("error",0);data.put("msg","查询成功");return data;}

其它的代码可以忽略。主要语句有:

获取帖子下的评论

 List<Map<String, Object>> info = commentsDao.findComment(jsonObject.getString("fWJLID"),null);

上图根据FWJLID获取评论。(此处可以当成帖子的ID,获取帖子下的评论)一级展示

对应SQL语句(OPT是我的用户表)

select tc.content ,tc.commentsId,convert(varchar(19),tc.startTime,120) as startTime,tc.recipientId ,tc.operatorId,zo.NAME as operatorName,tc.atId,zo.HeadImgUrl as operatorHeadImgUrlfrom TFW_Comments tcleft join zd_opt zo on zo.AID = tc.operatorId where tc.FWJLID = 5101

查询结果:

获取评论下的回复

List<Map<String, Object>> userResponse = userResponseDao.findUserResponse(commentsId, null, "","",null);

上图根据commentsid获取评论下的回复。(根据评论ID获取回复)二级展示

对应sql语句

selecttur.userResponseId,tur.operatorId,tur.recipientId,convert(varchar(19),tur.startTime,120) as startTime,tur.userRepContent,tmr.atId as tmrAtId,tmr.msgRelationId ,tmr.responseType,tmr.replyId,zo.NAME as operatorName,zo1.NAME as recipientName,zo.HeadImgUrl as operatorHeadImgUrl,zo1.HeadImgUrl as recipientHeadImgUrlfrom TFW_MsgRelation tmrleft join TFW_UserResponse tur on tur.userResponseId = tmr.userResponseIdleft join zd_opt zo on zo.AID = tur.operatorIdleft join zd_opt zo1 on zo1.AID = tur.recipientId where tmr.commentsId = 47

查询结果

获取二级回复

 twoReply = userResponseDao.findUserResponse(msgRelationId, userResponseId,"1","",null); //二级回复数据

上图是根据评论ID(msgRelationId)和回复ID(userResponseId)去获取二级回复。回复ID也就是父类。就是回复那一条回复的ID。 第三层展示

对应sql

selecttur.userResponseId,tur.operatorId,tur.recipientId,convert(varchar(19),tur.startTime,120) as startTime,tur.userRepContent,tmr.atId as tmrAtId,tmr.msgRelationId ,tmr.responseType,tmr.replyId,zo.NAME as operatorName,zo1.NAME as recipientName,zo.HeadImgUrl as operatorHeadImgUrl,zo1.HeadImgUrl as recipientHeadImgUrlfrom TFW_MsgRelation tmrleft join TFW_UserResponse tur on tur.userResponseId = tmr.userResponseIdleft join zd_opt zo on zo.AID = tur.operatorIdleft join zd_opt zo1 on zo1.AID = tur.recipientId where tmr.commentsId = 136 and tmr.replyId = 155

查询结果

返回页面展示和返回体展示

java评论、回复功能设计和实现相关推荐

  1. java评论回复功能例子_Java实现评论回复功能的完整步骤

    前言 使用递归循环开发评论回复功能,适用于大部分的简单单体应用 评论功能或许是大多数的单体应用之中会用到的功能,我们会在自己所开发的项目之中进行集成该功能 大多数时候我们会将评论功能划分成以下几种: ...

  2. java评论回复表设计_评论回复功能数据表设计

    CREATE TABLE `comment` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `topic_id` int(10) unsigned ...

  3. java仿qq空间音乐播放_完美实现仿QQ空间评论回复特效

    评论回复是个很常见的东西,但是各大网站实现的方式却不尽相同.大体上有两种方式 1. 像优酷这种最常见,在输入框中@要回复的人,这种方式下,用www.cppcns.com户可以修改@. 新浪微博则是在这 ...

  4. Java单表实现评论回复功能

    Java单表实现评论回复功能 1.简介 2.功能实现图 3.数据库设计 4.实体类 5.实现思路 6.功能实现 6.1 Sql入手 6.2 业务实现 7.前端实现 8.最终成果 1.简介 最近在写毕业 ...

  5. Android开发之评论回复功能

    Android开发之评论回复功能 一:效果图 二:具体代码 1.首先是布局文件(activity_main) 2.第二个布局文件(comment_item) 3.第三个布局文件(reply_item) ...

  6. 使用SpringBoot实现无限级评论回复功能

    评论功能已经成为APP和网站开发中的必备功能.本文采用springboot+mybatis-plus框架,通过代码主要介绍评论功能的数据库设计和接口数据返回.我们返回的格式可以分三种方案,第一种方案是 ...

  7. 评论回复功能的设计与实现

    评论回复功能的数据库设计可以分开设计成两张表,评论表和回复表,也可以将其设计为一张表,我采用的是一张表 评论回复表的相关字段(我做的是商品goods下的评论回复) 字段解释: gc_id:评论回复表i ...

  8. mysql 评论回复表设计_【数据库】评论回复表设计

    一般系统发展到一定时候,就会需要加上评论功能.评论也会有很多形式,不同形式的评论展示表的设计也不一样.这里介绍几种比较常见的评论. 1.一问一答 张三:文章写的不错. 作者 回复 张三:谢谢你的认可 ...

  9. php中删除评论怎么做的,php实现评论回复删除功能

    简单的评论回复删除功能,具体内容如下 一.数据库 建立两张表,一是pinglun表:二是huifu表 效果如下: 代码如下: 1.主页面 main.php 无标题文档 朋友圈 内容: 今天很嗨 que ...

最新文章

  1. 武汉自考本科计算机专业哪个好,2020年武汉自考本科专业有哪些?
  2. windows下学习linux,在Windows环境下学习Linux命令行的几种方法
  3. python函数手册_python学习手册——内置函数(上)
  4. CodeProject上的最近几篇关于IronPython技术的文章
  5. Servlet之Tomcat配置与启动(一)
  6. 旅游业者泄露个人信息可被起诉
  7. C++/C学习笔记(九)
  8. BeagleBone Black 连接USB摄像头,并实现采集、存储及传输
  9. maven安装教程+Eclipse整合
  10. Alan Walker MV 合辑01 by defender 歌词
  11. 深圳电视台小间距P2高清圆弧屏(弧形屏)是用软模组(软屏)拼成
  12. python两张图片无缝合成一张_Python将多张图片进行合并拼接
  13. 小米手机6如何刷成开发版获取root权限
  14. 开发中Base64编码运用
  15. 什么是黑客?黑客伦理和信息时代的精神
  16. 复现计算机论文模型,深度学习模型复现难?看看这篇句子对模型的复现论文
  17. cprogram作业
  18. 马斯京根法matlab程序,(一)马斯京根流量演算法
  19. 远程访问本地搭建的个人云盘【无公网IP】
  20. 第五章 WebRTC, SIP和 Verto

热门文章

  1. Halcon创建模板并进行模板匹配
  2. 软件设计师考试准备一
  3. 敏捷思维-架构设计中的方法学
  4. Dubbo的坑:Invalid name=“org.apache.dubbo.config.ProtocolConfig#0“ contains illegal cha
  5. python一行代码完成正态分布检验,附原理详解
  6. Postgresql表加索引
  7. asciidoc转换html,AsciiDoc:如何指定HTML输出字体?
  8. 嵌入式培训费用贵吗?成都嵌入式培训哪家好?
  9. 我的找工作心酸奇葩史
  10. 制作一个偏心轮连杆简易六足【内附资料下载链接】