다연이네

[days16] 댓글과 댓글 수에 대한 처리 본문

Spring

[days16] 댓글과 댓글 수에 대한 처리

 다연  2021. 2. 24. 13:36
반응형

1. 쿼리 실행

alter table tbl_board add (replycnt number default 0);

select * from tbl_board;

update tbl_board
set replycnt = 
	(
	select count(rno) 
    from tbl_reply 
    where tbl_reply.bno = tbl_board.bno
    );

commit;

댓글수에 대한 컬럼을 추가하고, 기존에 댓글이 있는 게시글의 경우 그 댓글 수로 update하는 작업

 

2. BoardVO 추가

private int replyCnt; //추가

컬럼을 추가했으니 필드도 추가해주자

 

3. BoardMapper.java

//@Param 알고 있어야
public void updateReplyCnt(@Param("bno") Long bno, @Param("amount") int amount);

댓글 수를 update하는 메소드

 

4. BoardMapper.xml

	<update id="updateReplyCnt">
    	update tbl_board 
    	set replycnt = replycnt + #{amount} 
    	where bno = #{bno}
  	</update>  

 

5. replyServiceImpl

-   private BoardMapper boardMapper; 추가
-  @Transactional 댓글 추가, 삭제  메소드 변경 (댓글수 증가하는 작업)

package org.zerock.service;

import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.zerock.domain.Criteria;
import org.zerock.domain.ReplyPageDTO;
import org.zerock.domain.ReplyVO;
import org.zerock.mapper.BoardMapper;
import org.zerock.mapper.ReplyMapper;

import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j;

// p.390
@Service
@Log4j
@AllArgsConstructor
public class ReplyServiceImpl implements ReplyService {
  
  private ReplyMapper mapper;  //@AllArgsConstructor 생성자에 의해 자동 주입(DI) 
  
  private BoardMapper boardMapper;
  
  //댓글은 전부 ajax
	@Transactional
	@Override
	public int register(ReplyVO vo) {

		log.info("register......" + vo);

		boardMapper.updateReplyCnt(vo.getBno(), 1);

		return mapper.insert(vo);

	}	
  @Override
  public ReplyVO get(Long rno) {
    log.info("get......" + rno);
    return mapper.read(rno);
  }

  @Override
  public int modify(ReplyVO vo) {
    log.info("modify......" + vo);
    return mapper.update(vo);
  }

	@Transactional
	@Override
	public int remove(Long rno) {

		log.info("remove...." + rno);

		ReplyVO vo = mapper.read(rno);

		boardMapper.updateReplyCnt(vo.getBno(), -1);
		return mapper.delete(rno);

	}

  @Override
  public List<ReplyVO> getList(Criteria cri, Long bno) {
    log.info("get Reply List of a Board " + bno);
    return mapper.getListWithPaging(cri, bno);
  }
  
 
  @Override
  public ReplyPageDTO getListPage(Criteria cri, Long bno) {
    return new ReplyPageDTO(
        mapper.getCountByBno(bno), 
        mapper.getListWithPaging(cri, bno));
  }

}

private BoardMapper boardMapper 필드를 추가하고

댓글 추가, 삭제 메소드에 @Transaction을 삽입해 트랜잭션이 이루어지도록 한다.

 

6. list.jsp에서 댓글 수를 출력해 타이틀 옆에 띄우는 코딩

<b>[  <c:out value="${board.replyCnt}" />  ]</b>

 

반응형

'Spring' 카테고리의 다른 글

[days16] 파일 업로드 처리  (0) 2021.02.24
[days16] AOP와 트랜잭션  (0) 2021.02.24
[days15] Ajax 댓글 처리  (0) 2021.02.23
[days15] REST 방식으로 전환  (0) 2021.02.23
[days14] 페이징 처리 및 [검색 기능] 구현 (2/2)  (0) 2021.02.22
Comments