본문 바로가기

Java/Spring

MyBatis로 대댓글 구현

배웠던 내용을 다시 한 번 정리해보는 글입니다 :)

 

코드는 답글을 작성할 수 있는 코드인데, 대댓글로도 구현이 가능할 것 같습니다.

 

*팀프로젝트 파티쉐어의 partyboard를 참고로 게시글을 작성합니다.

 

ERD:

파티별 게시판 구분을 위해 pnum을 사용

게시글 작성

* Service

@Transactional  
@Override  
public void regist(PartyBoardVO board) throws Exception {  
dao.register(board);  
// origin column 값을 등록된 게시글 번호로 수정  
dao.updateOrigin();  
}

* DAO

// 게시글 작성
@Insert("INSERT INTO partyboard(category,pnum,title,content,writer,mnum) "
+ "VALUES(#{category},#{pnum},#{title},#{content},#{writer},#{mnum})")
void register(PartyBoardVO vo) throws Exception;

@Update("UPDATE partyboard SET origin = LAST_INSERT_ID() "
+ "WHERE bno = LAST_INSERT_ID()")
void updateOrigin() throws Exception;

* LAST_INSERT_ID() : INSERT후 PRIMARY KEY 값을 가져온다. (동일한 트랜잭션에서만 사용 가능하다)

 

답글 작성(대댓글 작성)

  • origin : 원본글(질문글)인 경우 자신의 게시글번호를 저장하여 동일한 ref값일 경우 묶어서 출력할 수 있도록 저장
  • depth: view 화면에서 출력될 답변 글의 깊이(lev)
  • seq : 답변글 끼리의 정렬 순서

조회시 origin 내림차순 seq 오름차순으로 정렬

SELECT * FROM partyboard

ORDER BY origin DESC, seq ASC

*Service

@Transactional
@Override
public void registReply(PartyBoardVO board)throws Exception {
// origin, depth, seq
// 답변을 달려는 원본 글보다 아래쪽에 배치된 글들 seq(정렬) 값 수정
dao.updateReply(board);

board.setDepth(board.getDepth() + 1);
board.setSeq(board.getSeq() + 1);
dao.registReply(board);
}

*DAO

    /**
     * 원본글을 제외한 답글들의 정렬값 수정(밑으로 내리고 신규 답글이 들어갈 자리 만들어줌) 
     */
    @Update("UPDATE partyboard SET seq = seq + 1 "
            + " WHERE origin = #{origin} AND seq > #{seq}")
    void updateReply(PartyBoardVO board);


    // 답글 추가
    @Insert("INSERT INTO partyboard (category,pnum,title,content,writer,mnum,origin,depth,seq) "
            + "VALUES(#{category},#{pnum},#{title},#{content},#{writer},#{mnum},#{origin},#{depth},#{seq})")
    int registReply(PartyBoardVO board);

 

1.  기존에 원본글에 답변이 있는 경우,

     기존 답변글의 seq에 1을 추가해서

     지금 추가하는 답변글이 더 위쪽에 오도록 정렬함. (UPDATE SET 구문)

  1. 원본 글보다 지금 추가 하는 글은 depth,seq가 1씩 추가된다.(원본글 밑에 답변글이 정렬되게함). origin는 원본글과 동일하게 해서 그룹화해준다.

'Java > Spring' 카테고리의 다른 글

Filter 와 interceptor, AOP 차이와 용도  (0) 2024.02.22
개념정리 - REST API  (0) 2023.10.24
개념정리 - Spring  (0) 2023.10.24
인텔리 j  (0) 2023.08.31
SpringBoot 설치  (0) 2023.08.29