09009

[Spring] 예제1 - 게시글 수정 및 삭제 구현 본문

Back-End/Spring
[Spring] 예제1 - 게시글 수정 및 삭제 구현
09009

삭제: redirect

수정: 수정 페이지가 나오고 수정 완료 버튼을 누르면 파라미터를 전송하여 DB 업데이트 - redirect

 

쿼리 작성

특정 게시글 조회수 증가 (사용자가 게시글을 클릭하였을 때)

-- 특정 게시글 조회수 증가
UPDATE fp_board 
SET read_count = read_count + 1
WHERE id = 3;

게시글 삭제

-- 글 삭제
DELETE FROM fp_board WHERE id = 3;

실무에서는 게시글을 삭제할 때 DELETE문을 사용하지 않는다.

대신 필드를 하나 추가하여 UPDATE문으로 적용한다.

 

게시글 수정

-- 글 수정
UPDATE fp_board 
SET title = '바뀐 제목', content = '바뀐 내용'
WHERE id = 3;

이제 인터페이스에서 메서드 3개 선언하고 xml에서 쿼리 매핑하면 된다.

 

BoardSqlMapper.java

메서드 추가

게시글 수정 메서드는 제목, 내용을 수정하므로 dto를 파라미터로 받는다.

	// 조회수 증가
	public void increaseReadCount(int id);
	
	// 게시글 삭제
	public void deleteById(int id);
	
	// 게시글 수정 (제목, 내용, 게시글 id)
	public void update(BoardDto boardDto);

BoardSqlMapper.xml

쿼리 추가

	<update id="increaseReadCount">
		UPDATE fp_board 
		SET read_count = read_count + 1
		WHERE id = #{id}
	</update>
	
	<delete id="deleteById">
		DELETE FROM fp_board WHERE id = #{id}	
	</delete>

	<update id="update">
		UPDATE fp_board 
		SET title = #{title}, content = #{content}
		WHERE id = #{id}
	</update>

BoardServiceImpl.java

getBoard()에 조회수 증가 메서드를 호출하면 추후에 게시글 수정할 때도 조회수가 증가되므로

getBoard()에 조회수 증가 메서드를 호출하지 않도록 설계할 것이다. 

코드 추가

		public void increaseReadCount(int id) {
			boardSqlMapper.increaseReadCount(id);
		}
		
		public void deleteContent(int id) {
			boardSqlMapper.deleteById(id);
		}
		
		public void updateContent(BoardDto boardDto) {
			boardSqlMapper.update(boardDto);
		}

BoardController.java

메서드 수정

수정 버튼을 눌렀을 때 게시글 수정 화면이 나와야 한다.

수정 : 상세 글 보기 + 글쓰기 페이지가 합쳐진 구조

	@RequestMapping("readContentPage")
	public String readContentPage(Model model, int id) {
		//  사실 int는 null 값이 선언되지 못하므로 null이면 터진다.
		
		boardService.increaseReadCount(id);
		
		Map<String, Object> map = boardService.getBoard(id);
	
		model.addAttribute("data", map);
		
		return "board/readContentPage";
	}
    
    
    	@RequestMapping("deleteProcess")
	public String deleteProcess(int id) {
		
		boardService.deleteContent(id);
		
		return "redirect:./mainPage";
	}
    
    	@RequestMapping("updatePage")
	public String updatePage(Model model, int id) {
		
		Map<String, Object> map = boardService.getBoard(id);
		
		model.addAttribute("data", map);
		
		return "board/updatePage";
	
	}

 

게시글 수정 페이지 만들기

✍ updatePage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>게시글 수정</h1>

<form action="./updateContentProcess" method="post">
	작성자 : ${sessionUser.nickname} <br>
	제목 : <input type="text" name="title" value="${data.boardDto.title}"><br>
	내용 : <br>
	<textarea rows="10" cols="60" name="content">${data.boardDto.content}</textarea>
	<%-- hidden 태그는 항상 value가 설정되어 있어야 한다. --%>
	<input type="hidden" name="id" value="${data.boardDto.id}">
	<br>
	<button>수정</button>
</form>

</body>
</html>

BoardController.java

	@RequestMapping("updateContentProcess")
	public String updateContentProcess(BoardDto boardDto) {
		
		boardService.updateContent(boardDto);
		
		return "redirect:./mainPage";
	}