본문 바로가기
공부/Spring

[Spring] 게시판 만들기 : 댓글 목록

by students 2022. 9. 10.

1) ERD

2) DB 생성

 

DROP TABLE EXAMPLE_COMMENT;
CREATE TABLE EXAMPLE_COMMENT (
	comment_no NUMBER PRIMARY KEY,
	board_no NUMBER,
	user_no NUMBER,
	comment_content VARCHAR2(200) NOT NULL,
	comment_write_date DATE DEFAULT SYSDATE NOT NULL,
	CONSTRAINT comment_board_no FOREIGN KEY(board_no) REFERENCES EXAMPLE_BOARD(board_no),
	CONSTRAINT comment_user_no FOREIGN KEY(user_no) REFERENCES EXAMPLE_USER(user_no)	
);

DROP SEQUENCE Example_Comment_seq;
CREATE SEQUENCE Example_Comment_seq;

 

3) CommentVo.java

 

package com.spring.example.vo;

import java.util.Date;

import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.Length;

public class CommentVo {

	private int comment_no;
	private int board_no;
	private int user_no;
	
	@NotNull
	@Length(min = 1, max = 100)	
	private String comment_content;
	
	private Date comment_write_date;

	public CommentVo() {
		super();
	}

	public CommentVo(int comment_no, int board_no, int user_no, String comment_content, Date comment_write_date) {
		super();
		this.comment_no = comment_no;
		this.board_no = board_no;
		this.user_no = user_no;
		this.comment_content = comment_content;
		this.comment_write_date = comment_write_date;
	}

	public int getComment_no() {
		return comment_no;
	}

	public void setComment_no(int comment_no) {
		this.comment_no = comment_no;
	}

	public int getBoard_no() {
		return board_no;
	}

	public void setBoard_no(int board_no) {
		this.board_no = board_no;
	}

	public int getUser_no() {
		return user_no;
	}

	public void setUser_no(int user_no) {
		this.user_no = user_no;
	}

	public String getComment_content() {
		return comment_content;
	}

	public void setComment_content(String comment_content) {
		this.comment_content = comment_content;
	}

	public Date getComment_write_date() {
		return comment_write_date;
	}

	public void setComment_write_date(Date comment_write_date) {
		this.comment_write_date = comment_write_date;
	}

}

 

4) BoardController.java

 

	@RequestMapping("readContentPage")
	public String readContentPage(int board_no, Model model, @ModelAttribute("commentVo") CommentVo commentVo) {

		boardService.increaseReadCount(board_no);

		HashMap<String, Object> map = boardService.getBoard(board_no);
		model.addAttribute("data", map);

		ArrayList<HashMap<String, Object>> dataList = boardService.getCommentList();
		
		model.addAttribute("dataList", dataList);
		
		return "board/readContentPage";
	}

 

5) BoardService.java

 

	public ArrayList<HashMap<String, Object>> getCommentList() {
		ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();
		
		ArrayList<CommentVo> commentList = boardSQLMapper.getCommentList();
		
		for (CommentVo commentVo : commentList) {
			
			int userNo = commentVo.getUser_no();
			int boardNo = commentVo.getBoard_no();
			
			BoardVo boardVo = boardSQLMapper.getBoardByNo(boardNo);
			UserVo userVo = userSQLMapper.getUserByNo(userNo);
			
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("userVo", userVo);
			map.put("boardVo", boardVo);
			map.put("commentVo", commentVo);
			
			System.out.println(boardNo);
			
			dataList.add(map);
		}
		
		return dataList;
	}

 

6) BoardSQLMapper.java

 

	/* 게시글 댓글 조회 쿼리*/
	public ArrayList<CommentVo> getCommentList();

 

7) BoardSQLMapper.xml

 

	<select id="getCommentList" resultType="com.spring.example.vo.CommentVo">
		SELECT * FROM EXAMPLE_COMMENT ORDER BY comment_no DESC
	</select>

 

8) readContentPage.jsp

 

				<div class="row mt-2">
					<span>댓글목록</span>
					<div class="form-control" style="border: 1px solid #ff0000;">
						<c:forEach items="${dataList }" var="date">
							<div class="col">${date.userVo.user_nickname }
								<div class="row">
									${date.commentVo.comment_content }
									<div class="col">
										<fmt:formatDate value="${date.commentVo.comment_write_date }" pattern="yyyy년MM월dd일 HH시 mm분 ss초" />
									</div>
									<div class="d-grid gap-2 d-md-flex justify-content-md-end">
										<a href="./deleteCommentProcess?comment_no=${date.commentVo.comment_no }&board_no=${date.boardVo.board_no }" class="btn btn-outline-dark" type="button">댓글삭제</a>
										<a href="./updateCommentContentPage?comment_no=${date.commentVo.comment_no }" class="btn btn-outline-dark" type="button">댓글수정</a>
									</div>
								</div>
							</div>
						</c:forEach>
					</div>
				</div>

 

9) 실행화면

댓글