社区网站项目3.6 添加评论(用到事务管理)

    技术2022-07-10  93

      数据层: (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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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="#">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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="#">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</button> </div> </form>
    Processed: 0.015, SQL: 9