본문 바로가기
✨ Back-end/Spring-Boot

[Spring] 보드게시판 만들기(6) 댓글 등록

by 환풍 2023. 3. 25.
728x90

 

위와 같이 댓글을 달면 댓글 작성자의 이름, 댓글 등록 날짜, 내용이 나오도록 기능을 만드는 과정인

댓글 등록 기능을 만들어보았다

 

해당 부분도 데이터를 주고받는 쿼리문을 첫번째로 사용해야하므로 바로 mapper로 가보자.

 

Database

오라클 DB에 저장된 댓글 데이터

댓글 (reply)는 또 새로운 데이터 이므로 데이터베이스에 저장한 DB데이터를 바탕으로 새로운 mapper 파일을 만들었다.

reply-mapper.xml

위와 같이 댓글 등록은  insert를 이용해야하고, 기본키인 댓글 번호에는 서브쿼리를 사용하여 1부터 증가하도록 만들었다. 

 

ReplyService 인터페이스

mapper에 있는 insert id에서 적어준 insertReply를 메소드 이름으로 설정하고, ReplyVO 객체를 사용해준다.

매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음
2. 채워줄 값이 하나일 경우
 2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나
 2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나
3. 채워줄 값이 여러개인 경우 : 매개변수는 VO 객체.
리턴타입 : 쿼리 실행 결과를 어떻게 받아올지에 대한 정의
INSERT, UPDATE, DELETE 쿼리 실행 결과는
리턴타입을 int 혹은 void 사용하면됨. int로 받을 땐 return 필요o  void는 필요x
SELECT 쿼리 결과의 리턴타입은 크게 두 가지로 나뉨.
조회결과 데이터가 무조건 한줄만 조회 : VO 객체.
조회 결과 데이터가 0줄이상 가변적일 경우 : List<VO> 객체.

ReplyServiceImpl 클래스

해당 클래스에서 replyService 인터페이스의 상속을 받는다는 의미로 Service 어노테이션을 달아주고,

@Autowired 를 사용해  sqlSession에 의존성을 주입한다. 이후 댓글 등록 쿼리를 완성해보자.

 

완성 후 컨트롤러를 어디에 보내줘야할지 조금 고민을 해볼 필요가 있다. 이 쿼리는 어디에서 실행될까?

단순히 댓글을 등록하는 기능이므로 Reply에 있는 Controller로 들어가 관리를 해주면 된다.

 

ReplyController 컨트롤러

Controller로 오게되면 이렇게 @Resource를 이용하여 replyService 기능을 의존성 주입 시켜준다.

이후 @PostMapping을 이용하면서 메소드를 만들어주는데, 

board_detail.html

html에서 form 태그를 통해 method를 post로 주었기 때문이다. 이때  boardNum 데이터를 Controller에 들고가게 된다.

다시 위 ReplyController로 오면서, 코드들을 해석해보면 등록 메소드안에 ReplyVO 객체와 HttpSession을 들고온다.

session 값에 저장되어있던 loginInfo 정보를 MemberVO 객체의 loginInfo로 바꿔주고,

replyVO의 댓글 작성자 데이터에 MemberVO의 memId 데이터를 불러온다.

그렇게 하여 replyVO 데이터들을 출력해보면 아래와 같은 데이터가 저장된 것을 확인할 수 있다.

 

따라서 replyVO 데이터들을 댓글 등록 쿼리를 짜준 것에 넣어주면서 최종적으로 댓글 등록이 완료가 된다.

이후 return을 이용해 페이지 이동을 Controller로 해주기 위해 redirect를 사용했는데, 아까 상세정보에서 hidden으로 가져온 boardNum과 replyVO에 담긴 boardNum 값이 동일한 데이터 값만 들고 해당 경로로 이동할 수 있다.

 

데이터까지는 등록 완료했고, 이제 댓글을 뽑아내야하니 다음 포스팅에서 댓글 목록 출력을 해보자,

반응형

댓글