MelonPeach

13.스프링 게시판 만들기 / 게시판 댓글 목록 구현

안녕하세요? MelonPeach입니다.

이전에 페이징과 검색 유지 기능을 구현하였는데요.

이번에는 게시글안에 댓글 기능을 구현하도록 할게요.

 

1. 댓글 쿼리, 시퀀스 작성


스프링 게시판 만들기 / 댓글 쿼리작성

 

게시물에서 댓글은 어떤 특정 게시물에 종속되어있는 형태이기에 게시물을 구분할 수 있어야해요.

그래서 게시물 구분에 필요한 게시물 번호(bno), 댓글 구분에 필요한 댓글 번호(rno)가 있어요.

댓글은 작성자와 내용, 작성일자가 필요하고요.

 

댓글은 게시물이 있어야 작성할 수 있으므로, 댓글 테이블에 있는 bno는 값을 추가하는게 아니라

기존에 있던 게시판 테이블에 있는 bno를 따라가야해요. 그래서 이것을 참조하기 위해 foreign key를 사용합니다.

foreign key는 대상 테이블의 컬럼과 참조하는 테이블의 컬럼값이 존재하는지를 확인하고, 참조하는 테이블에 값이 없을을 경우 에러를 발생시켜요.

 

create table mp_reply (
    bno number not null,
    rno number not null,
    content varchar2(1000) not null,
    writer varchar2(50) not null,
    regdate date default sysdate,
    primary key(bno, rno)
);

alter table mp_reply add constraint mp_reply_bno foreign key(bno)
references mp_board(bno);

create sequence mp_reply_seq START WITH 1 MINVALUE 0;

commit;

 

 

 

2. 댓글 테스트용 쿼리 작성


스프링 게시판 만들기 / 댓글 테스트

 

우선 게시글에 댓글이 잘 달리는지 확인하기 위해서 오라클로 테스트를 해봅니다.

418번의 게시물에 댓글을 넣어봅니다.

이렇게 bno가 418번인 곳에 댓글이 1개가 달린것을 확인할 수 있습니다.

 

insert into mp_reply(bno, rno, content, writer)
    values(418, mp_reply_seq.nextval, '테스트댓글', '테스트 작성자');

select rno, content, writer, regdate
  from mp_reply
 where bno = 418;

 

 

 

3. 댓글 vo만들기


스프링 게시판 만들기 replyVO

 

이제는 vo폴더에 ReplyVO.java 파일을 만들어서 코드를 넣어줍니다.

 

package kr.co.vo;

import java.util.Date;

public class ReplyVO {

	private int bno;
	private int rno;
	private String content;
	private String writer;
	private Date regdate;
	public int getBno() {
		return bno;
	}
	public void setBno(int bno) {
		this.bno = bno;
	}
	public int getRno() {
		return rno;
	}
	public void setRno(int rno) {
		this.rno = rno;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public Date getRegdate() {
		return regdate;
	}
	public void setRegdate(Date regdate) {
		this.regdate = regdate;
	}
	
	@Override
	public String toString() {
		return "ReplyVO [bno=" + bno + ", rno=" + rno + ", content=" + content + ", writer=" + writer + ", regdate="
				+ regdate + "]";
	}
	
	
}

 

 

 

4. replyMapper.xml만들기


스프링 게시판 만들기 replyMapper.xml

src/main/resources에서 mappers폴더에 replyMapper.xml을 생성하고 코드를 작성해줘요.

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="replyMapper">

<!-- 댓글 조회 -->
	<select id="readReply" resultType="kr.co.vo.ReplyVO">
    	SELECT
    		  RNO, CONTENT, WRITER, REGDATE
    	 FROM MP_REPLY
    	WHERE BNO = #{bno}
	</select>

</mapper>

 


 

 

 

5. DAO와 Service 작성


스프링 게시판 만들기 댓글 DAO, Service

dao폴더에 ReplyDAO와 ReplyDAOImpl을 만들어주고 service폴더에 ReplyService와 ReplyServiceImpl을 만들어 줍니다.


 

 

 

6. BoardController 작성


스프링 게시판 만들기 댓글 BoardController inject

 

BoardController.java에 ReplyService를 주입합니다.

 

스프링 게시판 만들기 댓글 BoardController 댓글코드추가

 

그리고 게시판 조회 메서드에 댓글을 불러오는 코드를 추가해 줍니다.

 

왜 댓글을 따로 replyController을 만들어서 하지 않느냐 할 수도 있는데요.

댓글은 게시물에 종속되어 있기 때문입니다.


 

 

 

7. readView.jsp에 댓글목록 코드 추가


스프링 게시판 만들기 댓글 readView.jsp 댓글목록 코드추가

 

read.jsp에 댓글 목록을 보여줄 코드를 추가해줘요.

 

<!-- 댓글 -->
<div id="reply">
  <ol class="replyList">
    <c:forEach items="${replyList}" var="replyList">
      <li>
        <p>
        작성자 : ${replyList.writer}<br />
        작성 날짜 :  <fmt:formatDate value="${replyList.regdate}" pattern="yyyy-MM-dd" />
        </p>

        <p>${replyList.content}</p>
      </li>
    </c:forEach>   
  </ol>
</div>

 

 

 

8. 댓글 목록 테스트


댓글 목록 테스트

418번 글에 댓글이 달려있는것을 확인할 수 있어요.


 

게시물의 댓글 목록 기능을 구현했는데요.

다음 포스팅에서는 댓글 작성 기능에 대해 포스팅 할게요. 

주말 잘보내세요~!

이 글을 공유합시다

facebook twitter googleplus kakaostory naver