Cronex

Spring legacy 프로젝트 게시판 만들기(4) - 수정하기 본문

spring-mvc/board

Spring legacy 프로젝트 게시판 만들기(4) - 수정하기

crone 2021. 6. 19. 15:43
 

Spring legacy 프로젝트 게시판 만들기(3) - 상세조회

이전글 Spring legacy 프로젝트 게시판 만들기(2) - 전체 조회 이전 글 Spring legacy 프로젝트 게시판 만들기(1) - 설정 spring으로 간단한 흐름과 기능적으로 동작하는 게시판을 만들 예정입니다. Jungsangjin

cronex.tistory.com

소스코드


이번엔 게시물 수정을 해보도록 하겠습니다.

 

detail page

게시물 페이지에서 수정하기를 누르면 해당 게시물을 수정 할 수 있도록 진행해 보도록 하겠습니다.

 

수정하기 버튼을 눌렀을 때 수정 페이지로 넘어갈 수 있도록 javascript 코드를 추가하도록 하겠습니다.

 

- detail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${requestScope.board.board_title }</title>
<style>
table.table2 {
	border-collapse: separate;
	border-spacing: 1px;
	text-align: left;
	line-height: 1.5;
	border-top: 1px solid #ccc;
	margin: 20px 10px;
}

table.table2 tr {
	width: 50px;
	padding: 10px;
	font-weight: bold;
	vertical-align: top;
	border-bottom: 1px solid #ccc;
}

table.table2 td {
	width: 100px;
	padding: 10px;
	vertical-align: top;
	border-bottom: 1px solid #ccc;
}
.board-ul {
	list-style : none;
	padding-left : 0px;
}
.board-ul li {
	text-align : center;
	
}
.board-ul li input {
	width : 80%;
	height : 27px;
	
}
.board-ul li input:focus {
	outline : none;
}
.ul-span {
	margin-right :10px; 
	font-size : 20px; 
	font-weight: bold; 
	line-height:40px;
}
.board-ul li textarea:focus {
	outline : none;
}
.board-ul li textarea {
	resize: none;
}

.form-wrap{
	padding-top: 50px;
	text-align: center; 
	width: 700px; 
	border: 0px;
	margin-left : 350px;
}
.top-title{
	border-bottom : 3px solid #999;
}
.top-span {
	font-size :40px; 
	font-weight: bold;
}
.write-div {
	display: inline-block; 
	margin-left: 10px;
}
.date-div{
	display: inline-block; 
	margin-left: 37px;
}
.cnt-div{
	display: inline-block; 
	margin-left:350px;
}

</style>
<body>
	<jsp:include page="../common/sidebar.jsp" />
	<div class="content">
		<div class="form-wrap">
			<div class="top-title">
				<span class="top-span">${requestScope.board.board_id }번 게시물</span>
			</div>
			<form method="POST" action="write">
				<ul class="board-ul">
					<li style="text-align: left; margin-top : 20px;">
						<span class="ul-span">제목 : </span>
						<span class="ul-span board-content">${requestScope.board.board_title }</span>
					</li>
					<li style="text-align: left; margin-top: 30px;">
						<div class="write-div">
							<span>작성자 : </span>
							<span class="board-write">${requestScope.board.board_writer }</span>
						</div>
						<div class="date-div">
							<span>작성일 : </span>
							<span class="edit-date">${requestScope.board.board_date }</span>
						</div>
						<div class="cnt-div">
							<span>조회수</span>
							<span>0</span>
						</div>
					</li>
					<li style="margin-top :40px; border-top : 1px solid #999;">
						<div style="height :200px;">
							<p style="text-align: center;">${requestScope.board.board_text }</p>
						</div>
					</li>
					<li style="border-top : 1px solid #999;">
						<div style="text-align: right;  margin-top : 30px;">
							<button id="modify" type="button">수정하기</button>
							<button id="back" type="button">뒤로가기</button>
						</div>
					</li> 
				</ul>
			</form>
		</div>
	</div>
	
	<script type="text/javascript">
		$(function(){
			
			/*뒤로가기*/
			$("#back").on("click", function(){
				location.href = "${pageContext.servletContext.contextPath}/board";
				
			})
			
			/*수정하기
            * 추가된 코드 블럭
            */
			$("#modify").on("click", function() {
				//location.href = "../modify/" + "${board.board_id}"	
				location.href="${pageContext.servletContext.contextPath}/modify/" + "${board.board_id}"
			})
			
		})
	</script>
</body>
</html>


 

해당 요청을 받을  controller를 BoardController에 작성하도록 하겠습니다.

 

-BoardController.java

package com.js.board.controller;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.js.board.model.dto.BoardDTO;
import com.js.board.model.service.BoardService;

@Controller
public class BoardController {

	private static final Logger log = LoggerFactory.getLogger(BoardController.class);
	private final BoardService boardService;
	
	@Autowired
	public BoardController(BoardService boardService) {
		this.boardService = boardService;
	}
	
	/*
	 *board 리스트 페이지 접속 시 controller
	 *@param model Model 객체
	 *@return viewResolver에 전달할 view path String
	 */
	@RequestMapping(value ="/board", method = RequestMethod.GET)
	public String board(Model model) {
		
		List<BoardDTO> list = boardService.selectBoardList();
		model.addAttribute("list", list);
		log.info("list : {}", list);
		
		return "board/board";
	}
	
	/*상세 페이지 controller
	 *@param number 게시판 번호 
	 *@return viewResolver에 전달할 view path String
	 */
	@RequestMapping(value = "/board/{number}", method = RequestMethod.GET)
	public String detailBoard(@PathVariable int number, Model model) {
		
		BoardDTO board = boardService.selectById(number);
		model.addAttribute("board", board); 
		log.info("board  : {}" , board);
		
		return "board/detail";
	}
	
	/*
	 * 수정 페이지 controller
	 * @param number 게시판 번호
	 * @return viewResolver에 전달할 view path String
	 * */
	@RequestMapping(value = "/modify/{number}", method = RequestMethod.GET)
	public String modifyBoard(@PathVariable int number, Model model) {
		
		BoardDTO board = boardService.selectById(number);
		model.addAttribute("board", board);
		
		return "board/modify";
	}
}

detail과 같게 구성하도록 하겠습니다. 그럼 이어서 modify에 데이터를 구성하도록 하겠습니다.

지금까지 사용한 jsp와 같은 폴더 레벨에 구성하도록 하겠습니다.

file level

mapper를 조금 수정 하도록 하겠습니다.

 

- board-mapper.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="board">
 
 <!-- 	<resultMap type="com.js.board.model.dto.BoardDTO2" id="boardList">
 		<id column="BOARD_ID" property="id"/> 기본 키
 		<result column="BOARD_CATEGORY" property="category"/>
 		<result column="BOARD_WRITER" property="writer"/>
 		<result column="BOARD_TITLE" property="title"/>
 		<result column="BOARD_TEXT" property="text"/>
 		<result column="BOARD_DATE" property="date"/>
 		<result column="BOARD_REPLY" property="reply"/>
 		<result column="BOARD_LEVEL" property="level"/>
 		<result column="BOARD_STATUS" property="status"/>
 	</resultMap> -->
 		
 
 	<select id="selectList" resultType="com.js.board.model.dto.BoardDTO">
 		SELECT 
 		       BOARD_ID
			 , BOARD_CATEGORY
			 , BOARD_WRITER
			 , BOARD_TITLE
			 , BOARD_TEXT
			 , BOARD_DATE
		     , BOARD_REPLY
			 , BOARD_LEVEL
			 , BOARD_STATUS
		FROM BOARD
		WHERE BOARD_LEVEL = 0
		AND BOARD_STATUS = 'N'
 	</select>
 	
 	<select id="selectById" resultType="com.js.board.model.dto.BoardDTO" parameterType="_int">
 		SELECT 
 		       BOARD_ID
			 , BOARD_CATEGORY
			 , BOARD_WRITER
			 , BOARD_TITLE
			 , BOARD_TEXT
			 , BOARD_DATE
		     , BOARD_REPLY
			 , BOARD_LEVEL
			 , BOARD_STATUS
		FROM BOARD
		WHERE BOARD_ID = #{id}
		AND BOARD_LEVEL = 0
		AND BOARD_STATUS = 'N'
 	</select>
 	
 	
 </mapper>

각각의 쿼리문 where 절에 BOARD_LEVELBOARD_STATUS를 추가 하였습니다. BOARD_LEVEL은 0이 본문, 1이 댓글 형식으로 구성한 것입니다. BOARD_STATUS는 현재 삭제되지 않은 게시물을 표현하기 위해 'N'은 삭제 되지않은 게시물 'Y'는 삭제된 게시물로 구성하였습니다.

 

수정페이지는 아래와 같습니다.

수정 페이지

- modify.jsp(틀)

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>수정페이지</title>
<style>
table.table2 {
	border-collapse: separate;
	border-spacing: 1px;
	text-align: left;
	line-height: 1.5;
	border-top: 1px solid #ccc;
	margin: 20px 10px;
}

table.table2 tr {
	width: 50px;
	padding: 10px;
	font-weight: bold;
	vertical-align: top;
	border-bottom: 1px solid #ccc;
}

table.table2 td {
	width: 100px;
	padding: 10px;
	vertical-align: top;
	border-bottom: 1px solid #ccc;
}
.board-ul {
	list-style : none;
	padding-left : 0px;
}
.board-ul li {
	text-align : center;
	
}
.board-ul li input {
	width : 80%;
	height : 27px;
	
}
.board-ul li input:focus {
	outline : none;
}
.ul-span {
	margin-right :10px; 
	font-size : 20px; 
	font-weight: bold; 
	line-height:40px;
}
.board-ul li textarea:focus {
	outline : none;
}
.board-ul li textarea {
	resize: none;
}

</style>
<body>
	<jsp:include page="../common/sidebar.jsp" />
	<div class="content">
		<div
			style="padding-top: 50px; text-align: center; width: 700px; border: 0px;margin-left : 350px;">
			<div style="border-bottom : 3px solid #999;">
				<span style="font-size :40px; font-weight: bold;">수정하기</span>
			</div>
			<form method="POST" action="<c:out value='${pageContext.servletContext.contextPath }'/>/modify">
				<ul class="board-ul">
					<li>
						<span class="ul-span">제목 : </span>
						<input type="text" placeholder="제목을 입력해 주세요" id="title"></li>
					<li style="margin-top : 30px;">
						<textarea rows="25" cols="88" id="content"></textarea>
					</li>
					<li>
						<div style="text-align: right; padding-right:28px; margin-top : 10px;">
							<button type="submit" style="width:70px;" id="submit">수정하기</button>
							<button id="back">뒤로가기</button>
						</div>
					</li> 
				</ul>
			</form>
		</div>
	</div>
</body>
</html>


 

 이제 controller에서 model로 넘겨받은 데이터로 화면을 구성하도록 하겠습니다.

 

- modify.jsp(<c:out/> 적용)

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>수정페이지</title>
<style>
table.table2 {
	border-collapse: separate;
	border-spacing: 1px;
	text-align: left;
	line-height: 1.5;
	border-top: 1px solid #ccc;
	margin: 20px 10px;
}

table.table2 tr {
	width: 50px;
	padding: 10px;
	font-weight: bold;
	vertical-align: top;
	border-bottom: 1px solid #ccc;
}

table.table2 td {
	width: 100px;
	padding: 10px;
	vertical-align: top;
	border-bottom: 1px solid #ccc;
}
.board-ul {
	list-style : none;
	padding-left : 0px;
}
.board-ul li {
	text-align : center;
	
}
.board-ul li input {
	width : 80%;
	height : 27px;
	
}
.board-ul li input:focus {
	outline : none;
}
.ul-span {
	margin-right :10px; 
	font-size : 20px; 
	font-weight: bold; 
	line-height:40px;
}
.board-ul li textarea:focus {
	outline : none;
}
.board-ul li textarea {
	resize: none;
}

</style>
<body>
	<jsp:include page="../common/sidebar.jsp" />
	<div class="content">
		<div
			style="padding-top: 50px; text-align: center; width: 700px; border: 0px;margin-left : 350px;">
			<div style="border-bottom : 3px solid #999;">
				<span style="font-size :40px; font-weight: bold;">수정하기</span>
			</div>
			
			<form method="POST" action="<c:out value='${pageContext.servletContext.contextPath }'/>/modify">
				<ul class="board-ul">
					<li>
						<span class="ul-span">제목 : </span>
						<input type="text" placeholder="제목을 입력해 주세요" id="title" value='<c:out value="${requestScope.board.board_title}"/>'></li>
					<li style="margin-top : 30px;">
						<textarea rows="25" cols="88" id="content"><c:out value="${requestScope.board.board_text }"/></textarea>
					</li>
					<li>
						<div style="text-align: right; padding-right:28px; margin-top : 10px;">
							<button type="submit" style="width:70px;" id="submit">수정하기</button>
							<button id="back">뒤로가기</button>
						</div>
					</li> 
				</ul>
			</form>
		</div>
	</div>
</body>
</html>


modify.jsp

잘 적용되는 것을 볼 수 있습니다. 이제 제목 또는 내용을 수정 한 후에 수정하기 버튼을 누르면 

  • 해당 게시물의 수정 내용이 적용되고 db에 저장되게 할 것
  • 게시물 상세보기 페이지로 redirect를 시키는 것

위 두개를 진행하도록 하겠습니다.

 

form으로 post 전송 방식으로 서버에 전송하도록 하겠습니다. 먼저, 게시물을 구분하기 위해 게시물의 id를 input 태그에 hidden으로 값을 설정하여 전송하겠습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>수정페이지</title>
<style>
table.table2 {
	border-collapse: separate;
	border-spacing: 1px;
	text-align: left;
	line-height: 1.5;
	border-top: 1px solid #ccc;
	margin: 20px 10px;
}

table.table2 tr {
	width: 50px;
	padding: 10px;
	font-weight: bold;
	vertical-align: top;
	border-bottom: 1px solid #ccc;
}

table.table2 td {
	width: 100px;
	padding: 10px;
	vertical-align: top;
	border-bottom: 1px solid #ccc;
}
.board-ul {
	list-style : none;
	padding-left : 0px;
}
.board-ul li {
	text-align : center;
	
}
.board-ul li input {
	width : 80%;
	height : 27px;
	
}
.board-ul li input:focus {
	outline : none;
}
.ul-span {
	margin-right :10px; 
	font-size : 20px; 
	font-weight: bold; 
	line-height:40px;
}
.board-ul li textarea:focus {
	outline : none;
}
.board-ul li textarea {
	resize: none;
}

</style>
<body>
	<jsp:include page="../common/sidebar.jsp" />
	<div class="content">
		<div
			style="padding-top: 50px; text-align: center; width: 700px; border: 0px;margin-left : 350px;">
			<div style="border-bottom : 3px solid #999;">
				<span style="font-size :40px; font-weight: bold;">수정하기</span>
			</div>
			
			<form method="POST" action="<c:out value='${pageContext.servletContext.contextPath }'/>/modify">
				<ul class="board-ul">
				
				<!-- hidden으로 추가한 id 값 -->
				 <li>
				 	<input type="hidden" id="board-id" value="<c:out value='${requestScope.board.board_id }'/>">
				 </li> 
					<li>
						<span class="ul-span">제목 : </span>
						<input type="text" placeholder="제목을 입력해 주세요" id="title" value='<c:out value="${requestScope.board.board_title}"/>'></li>
					<li style="margin-top : 30px;">
						<textarea rows="25" cols="88" id="content"><c:out value="${requestScope.board.board_text }"/></textarea>
					</li>
					<li>
						<div style="text-align: right; padding-right:28px; margin-top : 10px;">
							<button type="submit" style="width:70px;" id="submit">수정하기</button>
							<button id="back">뒤로가기</button>
						</div>
					</li> 
				</ul>
			</form>
		</div>
	</div>
</body>
</html>


 이어서 controller를 작성 하겠습니다.

 

package com.js.board.controller;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.js.board.model.dto.BoardDTO;
import com.js.board.model.service.BoardService;

@Controller
public class BoardController {

	private static final Logger log = LoggerFactory.getLogger(BoardController.class);
	private final BoardService boardService;
	
	@Autowired
	public BoardController(BoardService boardService) {
		this.boardService = boardService;
	}
	
	/*
	 *board 리스트 페이지 접속 시 controller
	 *@param model Model 객체
	 *@return viewResolver에 전달할 view path String
	 */
	@RequestMapping(value ="/board", method = RequestMethod.GET)
	public String board(Model model) {
		
		List<BoardDTO> list = boardService.selectBoardList();
		model.addAttribute("list", list);
		log.info("list : {}", list);
		
		return "board/board";
	}
	
	/*상세 페이지 controller
	 *@param number 게시판 번호 
	 *@return viewResolver에 전달할 view path String
	 */
	@RequestMapping(value = "/board/{number}", method = RequestMethod.GET)
	public String detailBoard(@PathVariable int number, Model model) {
		
		BoardDTO board = boardService.selectById(number);
		model.addAttribute("board", board); 
		log.info("board  : {}" , board);
		
		return "board/detail";
	}
	
	/*
	 * 수정 페이지 조회 controller
	 * @param number 게시판 번호
	 * @return viewResolver에 전달할 view path String
	 * */
	@RequestMapping(value = "/modify/{number}", method = RequestMethod.GET)
	public String modifyBoard(@PathVariable int number, Model model) {
		
		BoardDTO board = boardService.selectById(number);
		model.addAttribute("board", board);
		
		return "board/modify";
	}
	
	/*
	 *수정 페이지 수정 controller 
	 * @param board   게시물 정보
	 * @return redirect 할 요청주소(url)
	 * */
	@RequestMapping(value ="/modify", method = RequestMethod.POST)
	public String modifyBoard(@ModelAttribute BoardDTO board) {
		log.info("board : {}", board);
		
		return null;
	}
}

 

 이제 controller도 만들었으니 수정하기 버튼 클릭 시 잘 가져와는지 확인해보겠습니다.

INFO : com.js.board.controller.BoardController - board : BoardDTO [board_id=0, board_category=0, board_writer=null, board_title=null, board_text=null, board_date=null, board_reply=0, board_level=0, board_status=

생각처럼 데이터를 받아와 담지 못했다. 이유는 무엇일까 생각해보니 전송하는 form 태그 안에 전송태그들에 name을 설정해주지 않아서 전송되지 않았던 것이다. 다시 modify.jsp 파일로 돌아가 name을 설정해 주도록 하겠습니다.

 

- detail.jsp(name 설정)

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>수정페이지</title>
<style>
table.table2 {
	border-collapse: separate;
	border-spacing: 1px;
	text-align: left;
	line-height: 1.5;
	border-top: 1px solid #ccc;
	margin: 20px 10px;
}

table.table2 tr {
	width: 50px;
	padding: 10px;
	font-weight: bold;
	vertical-align: top;
	border-bottom: 1px solid #ccc;
}

table.table2 td {
	width: 100px;
	padding: 10px;
	vertical-align: top;
	border-bottom: 1px solid #ccc;
}
.board-ul {
	list-style : none;
	padding-left : 0px;
}
.board-ul li {
	text-align : center;
	
}
.board-ul li input {
	width : 80%;
	height : 27px;
	
}
.board-ul li input:focus {
	outline : none;
}
.ul-span {
	margin-right :10px; 
	font-size : 20px; 
	font-weight: bold; 
	line-height:40px;
}
.board-ul li textarea:focus {
	outline : none;
}
.board-ul li textarea {
	resize: none;
}

</style>
<body>
	<jsp:include page="../common/sidebar.jsp" />
	<div class="content">
		<div
			style="padding-top: 50px; text-align: center; width: 700px; border: 0px;margin-left : 350px;">
			<div style="border-bottom : 3px solid #999;">
				<span style="font-size :40px; font-weight: bold;">수정하기</span>
			</div>
			
			<form method="POST" action="<c:out value='${pageContext.servletContext.contextPath }'/>/modify">
				<ul class="board-ul">
				
				<!-- hidden으로 추가한 id 값 -->
				 <li>
				 	<input type="hidden" id="board-id" name="board_id" value="<c:out value='${requestScope.board.board_id }'/>">
				 </li> 
					<li>
						<span class="ul-span">제목 : </span>
						<input type="text" placeholder="제목을 입력해 주세요" id="title" name="board_title" value='<c:out value="${requestScope.board.board_title}"/>'></li>
					<li style="margin-top : 30px;">
						<textarea rows="25" cols="88" id="content" name="board_text"><c:out value="${requestScope.board.board_text }"/></textarea>
					</li>
					<li>
						<div style="text-align: right; padding-right:28px; margin-top : 10px;">
							<button type="submit" style="width:70px;" id="submit">수정하기</button>
							<button id="back">뒤로가기</button>
						</div>
					</li> 
				</ul>
			</form>
		</div>
	</div>
</body>
</html>


 name을 설정 하고난 후 다시 전송해 보면

INFO : com.js.board.controller.BoardController - board : BoardDTO [board_id=2, board_category=0, board_writer=null, board_title=제목2, board_text=내용2, board_date=null, board_reply=0, board_level=0, board_status=

잘 전송된 것을 확인해 볼 수 있습니다. 이어서 Service와 Repository mapper 까지 작성하도록 하겠습니다.

 

-BoardService.java (interface)

package com.js.board.model.service;

import java.util.List;

import com.js.board.model.dto.BoardDTO;

public interface BoardService {
	
	/*select board list*/
	public List<BoardDTO> selectBoardList();

	/*select board*/
	public BoardDTO selectById(int number);

	/*update board*/
	public void updateById(BoardDTO board);

}

-BoardServiceImp.java

package com.js.board.model.service;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.js.board.model.dto.BoardDTO;
import com.js.board.model.repository.BoardRepository;

@Service("boardService")
public class BoardServiceImpl implements BoardService{

	private final BoardRepository boardRepository;
	private final SqlSessionTemplate sqlSession;
	
	@Autowired
	public BoardServiceImpl(BoardRepository boardRepository, SqlSessionTemplate sqlSession) {
		this.boardRepository = boardRepository;
		this.sqlSession = sqlSession;
	}
	
	/*board list를 조회할 때 사용하는 service method
	 * @return board List 정보 
	 * */
	@Override
	public List<BoardDTO> selectBoardList() {
		
		return boardRepository.selectBoardList(sqlSession);
	}

	/*
	 * board를 조회할 때 사용하는 service method
	 * @param number 게시판 번호
	 * @return board 정보
	 * */
	@Override
	public BoardDTO selectById(int number) {
		
		return boardRepository.selectById(number, sqlSession);
	}

	/*
	 * board를 수정할 때 사용하는 service method
	 * @param board 게시물 수정정보가 담긴 객체
	 * @return 
	 * */
	@Override
	public void updateById(BoardDTO board) {
		
		boardRepository.updateById(board, sqlSession);
	}

}

 

-BoardRepository.java (interface)

package com.js.board.model.repository;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;

import com.js.board.model.dto.BoardDTO;

public interface BoardRepository {

	/*select Board List*/
	public List<BoardDTO> selectBoardList(SqlSessionTemplate sqlSession);
	
	/*select Board*/
	public BoardDTO selectById(int number, SqlSessionTemplate sqlSession);

	/*update Board*/
	public int updateById(BoardDTO board, SqlSessionTemplate sqlSession);
	
}

 

-BoardRepositoryImpl.java

package com.js.board.model.repository;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

import com.js.board.model.dto.BoardDTO;

@Repository("boardRepository")
public class BoardRepositoryImpl implements BoardRepository{

	/*
	 * board List 조회 Repository method
	 * @param sqlSession    service에서 전달받은 sqlSessionTemplate 쿼리문 실행할 객체
	 * @return db에서 조회한 board List정보
	 * */
	@Override
	public List<BoardDTO> selectBoardList(SqlSessionTemplate sqlSession) {
		
		return sqlSession.selectList("board.selectList");
	}

	/*
	 * board 조회 Repository method
	 * @param number  board 번호
	 * @param sqlSession   service에서 전달받은 sqlSessionTemplate 쿼리문 실행할 객체
	 * @return db에서 조회한 board 정보
	 * */
	@Override
	public BoardDTO selectById(int number, SqlSessionTemplate sqlSession) {
		
		return sqlSession.selectOne("board.selectById", number);
	}

	/*
	 * board update Repository method
	 * @param board 수정할 보드정보 객체
	 * @param sqlSession 쿼리문 실행할 객체
	 * */
	@Override
	public int updateById(BoardDTO board, SqlSessionTemplate sqlSession) {
		
		
		return sqlSession.update("board.updateById", board);
	}
	
}

 

- board-mapper.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="board">
 
 <!-- 	<resultMap type="com.js.board.model.dto.BoardDTO2" id="boardList">
 		<id column="BOARD_ID" property="id"/> 기본 키
 		<result column="BOARD_CATEGORY" property="category"/>
 		<result column="BOARD_WRITER" property="writer"/>
 		<result column="BOARD_TITLE" property="title"/>
 		<result column="BOARD_TEXT" property="text"/>
 		<result column="BOARD_DATE" property="date"/>
 		<result column="BOARD_REPLY" property="reply"/>
 		<result column="BOARD_LEVEL" property="level"/>
 		<result column="BOARD_STATUS" property="status"/>
 	</resultMap> -->
 		
 
 	<select id="selectList" resultType="com.js.board.model.dto.BoardDTO">
 		SELECT 
 		       BOARD_ID
			 , BOARD_CATEGORY
			 , BOARD_WRITER
			 , BOARD_TITLE
			 , BOARD_TEXT
			 , BOARD_DATE
		     , BOARD_REPLY
			 , BOARD_LEVEL
			 , BOARD_STATUS
		FROM BOARD
		WHERE BOARD_LEVEL = 0
		AND BOARD_STATUS = 'N'
 	</select>
 	
 	<select id="selectById" resultType="com.js.board.model.dto.BoardDTO" parameterType="_int">
 		SELECT 
 		       BOARD_ID
			 , BOARD_CATEGORY
			 , BOARD_WRITER
			 , BOARD_TITLE
			 , BOARD_TEXT
			 , BOARD_DATE
		     , BOARD_REPLY
			 , BOARD_LEVEL
			 , BOARD_STATUS
		FROM BOARD
		WHERE BOARD_ID = #{id}
		AND BOARD_LEVEL = 0
		AND BOARD_STATUS = 'N'
 	</select>
 	
 	<update id="updateById" parameterType="com.js.board.model.dto.BoardDTO">
 		UPDATE 
 		    BOARD
 		SET 
 		    BOARD_TITLE = #{board_title}
 		  , BOARD_TEXT = #{board_text}
 		WHERE 
 		    BOARD_ID = #{board_id}
 	</update>
 	
 	
 </mapper>

다 작성하였으니 수정한 후 db 수정이 되는지 확인해 보도록 하겠습니다.

modify page

이제 수정하기 버튼을 누르고 난 후 db를 확인해 보면

oracle db

수정이 된 것을 확인할 수 있습니다. 마지막으로 수정이 되고 난후 해당 게시물의 detail page로 redirect를 진행 하도록 하겠습니다.

 

-BoardController.java

package com.js.board.controller;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.js.board.model.dto.BoardDTO;
import com.js.board.model.service.BoardService;

@Controller
public class BoardController {

	private static final Logger log = LoggerFactory.getLogger(BoardController.class);
	private final BoardService boardService;
	
	@Autowired
	public BoardController(BoardService boardService) {
		this.boardService = boardService;
	}
	
	/*
	 *board 리스트 페이지 접속 시 controller
	 *@param model Model 객체
	 *@return viewResolver에 전달할 view path String
	 */
	@RequestMapping(value ="/board", method = RequestMethod.GET)
	public String board(Model model) {
		
		List<BoardDTO> list = boardService.selectBoardList();
		model.addAttribute("list", list);
		log.info("list : {}", list);
		
		return "board/board";
	}
	
	/*상세 페이지 controller
	 *@param number 게시판 번호 
	 *@return viewResolver에 전달할 view path String
	 */
	@RequestMapping(value = "/board/{number}", method = RequestMethod.GET)
	public String detailBoard(@PathVariable int number, Model model) {
		
		BoardDTO board = boardService.selectById(number);
		model.addAttribute("board", board); 
		log.info("board  : {}" , board);
		
		return "board/detail";
	}
	
	/*
	 * 수정 페이지 조회 controller
	 * @param number 게시판 번호
	 * @return viewResolver에 전달할 view path String
	 * */
	@RequestMapping(value = "/modify/{number}", method = RequestMethod.GET)
	public String modifyBoard(@PathVariable int number, Model model) {
		
		BoardDTO board = boardService.selectById(number);
		model.addAttribute("board", board);
		
		return "board/modify";
	}
	
	/*
	 *수정 페이지 수정 controller 
	 * @param board   게시물 정보
	 * @return redirect 할 요청주소(url)
	 * */
	@RequestMapping(value ="/modify", method = RequestMethod.POST)
	public String modifyBoard(@ModelAttribute BoardDTO board) {
		
		boardService.updateById(board);
		log.info("board : {}", board);
		
		return "redirect:/board/" + board.getBoard_id();
	}
}

 마지막으로 브라우저에서 확인해 보도록 하겠습니다.

modify page

수정페이지에서 수정하기 버튼을 누르면

detail page
302 redirect

수정되고 난 후 detail 페이지로 redirect 되는 것을 확인할 수 있습니다.