数据层: (1)增加评论数据。 (2)修改帖子的评论数量。 业务层: (1)处理添加评论的业务:先增加评论,再更新帖子的评论数量。 表现层: (1)处理添加评论数据的请求。 (2)设置添加评论的表单。 在CommentMapper接口类中添加
int insertComment(Comment comment);在comment-mapper.xml中添加
<sql id="insertFields"> user_id,entity_type,entity_id,target_id,content,status,create_time </sql> <insert id="insertComment" parameterType="Comment"> insert into comment(<include refid="insertFields"></include>) values(#{userId},#{entityType},#{entityId},#{targetId},#{content},#{status},#{createTime}) </insert>在DiscussPostMapper接口类里添加
int updateCommentCount(int id, int commentCount);在discusspost-mapper.xml里添加
<update id="updateCommentCount"> update discuss_post set comment_count = #{commentCount} where id = #{id} </update>在DiscussPostService类中加一个方法
public int updateCommentCount(int id, int commentCount){ return discussPostMapper.updateCommentCount(id, commentCount); }在CommentService类里添加
//事务管理 @Transactional(isolation = Isolation.READ_COMMITTED,propagation = Propagation.REQUIRED) public int addComment(Comment comment){ if(comment==null){ throw new IllegalArgumentException("参数不能为空!"); } //添加评论 comment.setContent(HtmlUtils.htmlEscape(comment.getContent())); comment.setContent(sensitiveFilter.filter(comment.getContent())); int rows = commentMapper.insertComment(comment); //更新【帖子】评论数量 if(comment.getEntityType()==ENTITY_TYPE_POST) { int count = commentMapper.selectCountByEntity(comment.getEntityType(), comment.getEntityId()); discussPostService.updateCommentCount(comment.getEntityId(),count); } return rows; }新建一个CommentController类,添加
@RequestMapping(path="/add/{discussPostId}",method= RequestMethod.POST) public String addComment(@PathVariable("discussPostId") int discussPostId, Comment comment){ comment.setUserId(hostHolder.getUser().getId()); comment.setStatus(0); comment.setCreateTime(new Date()); commentService.addComment(comment); return "redirect:/discuss/detail/"+discussPostId; }在discuss-detail.html里,改写回帖输入部分
<!-- 回帖输入 --> <div class="container mt-3"> <form class="replyform" method="post" th:action="@{|/comment/add/${post.id}|}"> <p class="mt-3"> <a name="replyform"></a> <textarea placeholder="在这里畅所欲言你的看法吧!" name="content"></textarea> <input type="hidden" name="entityType" value="1"> <input type="hidden" name="entityId" th:value="${post.id}"> </p> <p class="text-right"> <button type="submit" class="btn btn-primary btn-sm"> 回 帖 </button> </p> </form> </div>以及回复输入框(普通的评论,没有针对谁)
<!-- 回复输入框 --> <li class="pb-3 pt-3"> <form method="post" th:action="@{|/comment/add/${post.id}|}"> <div> <input type="text" class="input-size" name="content" placeholder="请输入你的观点"/> <input type="hidden" name="entityType" value="2"> <input type="hidden" name="entityId" th:value="${cvo.comment.id}"> </div> <div class="text-right mt-2"> <button type="submit" class="btn btn-primary btn-sm" onclick="#"> 回 复 </button> </div> </form> </li>以及对评论的回复(针对某人的评论)
<form method="post" th:action="@{|/comment/add/${post.id}|}"> <div> <input type="text" class="input-size" name="content" th:placeholder="|回复${rvo.user.username}|"/> <input type="hidden" name="entityType" value="2"> <input type="hidden" name="entityId" th:value="${cvo.comment.id}"> <input type="hidden" name="targetId" th:value="${rvo.user.id}"> </div> <div class="text-right mt-2"> <button type="submit" class="btn btn-primary btn-sm" onclick="#"> 回 复 </button> </div> </form>