问答平台(3),添加评论

数据访问层

  • 添加评论数据
    1
    2
    // CommentMapper.java
    int insertComment(Comment comment);
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- 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>
  • 修改帖子的评论数量
    1
    2
    // DiscussPostMapper.java
    int updateCommentCount(int id, int commentCount);
    1
    2
    3
    4
    <!-- discusspost-mapper.xml -->
    <update id="updateCommentCount">
    update discuss_post set comment_count = #{commentCount} where id = #{id}
    </update>

业务层

  • 处理添加评论的业务:先增加评论、再更新帖子的评论数量(事务管理)。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // CommentService.java
    @Autowired
    private CommentMapper commentMapper;

    @Autowired
    private SensitiveFilter sensitiveFilter;

    @Autowired
    private DiscussPostMapper discussPostMapper;

    @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());
    discussPostMapper.updateCommentCount(comment.getEntityId(), count);
    }

    return rows;
    }
    1
    2
    3
    4
    // DiscussPostService.java
    public int updateCommentCount(int id, int commentCount) {
    return discussPostMapper.updateCommentCount(id, commentCount);
    }

表现层

  • 处理添加评论数据的请求
  • 设置添加评论的表单
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // CommentController.java
    @Controller
    @RequestMapping("/comment")
    public class CommentController implements CommunityConstant {

    @Autowired
    private CommentService commentService;

    @Autowired
    private HostHolder hostHolder;

    @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;
    }
    }

页面

  • 处理回复列表、回复输入框。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <!-- 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>
    <!-- 回复列表 -->
    <!-- 第1条回复 -->
    <div th:id="|huifu-${rvoStat.count}|" class="mt-4 collapse">
    <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>
    </div>

问答平台(3),添加评论
https://lcf163.github.io/2020/05/14/问答平台(3),添加评论/
作者
乘风的小站
发布于
2020年5月14日
许可协议