java评论、回复功能设计和实现
最近实现了评论和回复、点赞、@的功能。在这里分享一下我的设计思路(先分享评论和回复功能)。希望各位读者给出一些不一样的建议后期改进。
效果展示
总共是两层回复 (回复评论、回复评论下的回复)
数据库设计
评论表(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评论、回复功能设计和实现相关推荐
- java评论回复功能例子_Java实现评论回复功能的完整步骤
前言 使用递归循环开发评论回复功能,适用于大部分的简单单体应用 评论功能或许是大多数的单体应用之中会用到的功能,我们会在自己所开发的项目之中进行集成该功能 大多数时候我们会将评论功能划分成以下几种: ...
- java评论回复表设计_评论回复功能数据表设计
CREATE TABLE `comment` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `topic_id` int(10) unsigned ...
- java仿qq空间音乐播放_完美实现仿QQ空间评论回复特效
评论回复是个很常见的东西,但是各大网站实现的方式却不尽相同.大体上有两种方式 1. 像优酷这种最常见,在输入框中@要回复的人,这种方式下,用www.cppcns.com户可以修改@. 新浪微博则是在这 ...
- Java单表实现评论回复功能
Java单表实现评论回复功能 1.简介 2.功能实现图 3.数据库设计 4.实体类 5.实现思路 6.功能实现 6.1 Sql入手 6.2 业务实现 7.前端实现 8.最终成果 1.简介 最近在写毕业 ...
- Android开发之评论回复功能
Android开发之评论回复功能 一:效果图 二:具体代码 1.首先是布局文件(activity_main) 2.第二个布局文件(comment_item) 3.第三个布局文件(reply_item) ...
- 使用SpringBoot实现无限级评论回复功能
评论功能已经成为APP和网站开发中的必备功能.本文采用springboot+mybatis-plus框架,通过代码主要介绍评论功能的数据库设计和接口数据返回.我们返回的格式可以分三种方案,第一种方案是 ...
- 评论回复功能的设计与实现
评论回复功能的数据库设计可以分开设计成两张表,评论表和回复表,也可以将其设计为一张表,我采用的是一张表 评论回复表的相关字段(我做的是商品goods下的评论回复) 字段解释: gc_id:评论回复表i ...
- mysql 评论回复表设计_【数据库】评论回复表设计
一般系统发展到一定时候,就会需要加上评论功能.评论也会有很多形式,不同形式的评论展示表的设计也不一样.这里介绍几种比较常见的评论. 1.一问一答 张三:文章写的不错. 作者 回复 张三:谢谢你的认可 ...
- php中删除评论怎么做的,php实现评论回复删除功能
简单的评论回复删除功能,具体内容如下 一.数据库 建立两张表,一是pinglun表:二是huifu表 效果如下: 代码如下: 1.主页面 main.php 无标题文档 朋友圈 内容: 今天很嗨 que ...
最新文章
- 武汉自考本科计算机专业哪个好,2020年武汉自考本科专业有哪些?
- windows下学习linux,在Windows环境下学习Linux命令行的几种方法
- python函数手册_python学习手册——内置函数(上)
- CodeProject上的最近几篇关于IronPython技术的文章
- Servlet之Tomcat配置与启动(一)
- 旅游业者泄露个人信息可被起诉
- C++/C学习笔记(九)
- BeagleBone Black 连接USB摄像头,并实现采集、存储及传输
- maven安装教程+Eclipse整合
- Alan Walker MV 合辑01 by defender 歌词
- 深圳电视台小间距P2高清圆弧屏(弧形屏)是用软模组(软屏)拼成
- python两张图片无缝合成一张_Python将多张图片进行合并拼接
- 小米手机6如何刷成开发版获取root权限
- 开发中Base64编码运用
- 什么是黑客?黑客伦理和信息时代的精神
- 复现计算机论文模型,深度学习模型复现难?看看这篇句子对模型的复现论文
- cprogram作业
- 马斯京根法matlab程序,(一)马斯京根流量演算法
- 远程访问本地搭建的个人云盘【无公网IP】
- 第五章 WebRTC, SIP和 Verto
热门文章
- Halcon创建模板并进行模板匹配
- 软件设计师考试准备一
- 敏捷思维-架构设计中的方法学
- Dubbo的坑:Invalid name=“org.apache.dubbo.config.ProtocolConfig#0“ contains illegal cha
- python一行代码完成正态分布检验,附原理详解
- Postgresql表加索引
- asciidoc转换html,AsciiDoc:如何指定HTML输出字体?
- 嵌入式培训费用贵吗?成都嵌入式培训哪家好?
- 我的找工作心酸奇葩史
- 制作一个偏心轮连杆简易六足【内附资料下载链接】