배웠던 내용을 다시 한 번 정리해보는 글입니다 :)
코드는 답글을 작성할 수 있는 코드인데, 대댓글로도 구현이 가능할 것 같습니다.
*팀프로젝트 파티쉐어의 partyboard를 참고로 게시글을 작성합니다.
ERD:
게시글 작성
* 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 구문)
- 원본 글보다 지금 추가 하는 글은 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 |