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

[Spring] 보드게시판 만들기(7) 댓글 리스트 출력

by 환풍 2023. 3. 25.
728x90

댓글 리스트 출력 기능을 만들기 위해서는 html에 데이터를 뿌려줘야한다.

그럼 당연히 DB기능을 써줘야하므로 mapper로 가자.

 

reply-mapper

select 태그를 이용한 쿼리이므로 resultMap 또는 reultType이 필요한데, 리스트 출력은 여러개를 조회하는 것이므로 Map을 써주며, 이때 " " 안에는 resultMap의 id가 들어온다.

이전에 포스팅했을때 boardNum 데이터를 계속해서 데이터를 움직여줬다. 따라서 boardNum에 있는 값이 같은 것만 조회할 수 있도록 조건을 주었다.

ReplyService 인터페이스

댓글 목록은 여러개의 데이터가 출력되는데,

이때 쿼리에서 boardNum 하나의 변수로만 값을 채워줬으니 위와 같은 코드를 짤 수 있다.

매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
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 클래스

댓글은 상세보기와 다르게 여러개의 VO객체가 쮸르륵 나오므로 selectList를 이용해야한다.

 

이렇게 Service까지의 작업을 모두 마친 후, 무슨 Controller에서 받아올지를 정해야하는데, 

Board_detail에 있는 댓글 기능이므로, BoardController의 boardDetail에서 작업을 해줘야한다.

BoardController 컨트롤러

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

이후 위와 같이 게시글 상세정보 Controller 경로로 들어와 ReplyVO 객체를 매개변수에 만들어주고, 

reply의 service에서 만들었던 쿼리를 이곳에다가 적용시켜 준다. replyVO라는 이름으로 model에 저장한 후,

board_detail.html로 이동한다.

 

board_detail.html

여기서 th:each를 이용하여 Controller에서 저장된 replyVO 객체를 reply라는 이름으로 반복시켜준다.

댓글 작성자, 댓글 등록 날짜, 댓글 내용 이렇게 3개를 뽑아주는데,

 

그 밑에 있는 <th:if> 태그의 session은 다음 포스팅에서 알아보자.

빨간 박스 안에 있는 댓글이 환풍 이라는 사용자가 작성한 댓글이며,

파란 박스 안에 있는 댓글은 다른 사용자가 작성한 댓글이다. 보다시피, 본인이 쓴 댓글은 수정과 삭제가 가능하나, 타인이 쓴 댓글은 수정과 삭제가 불가능하다.

session을 이용해서 loginInfo 값이 같아야 삭제 또는 수정을 할 수 있으며, 다르면 할 수 없다. 

반응형

댓글