Cronex
Spring legacy 프로젝트 게시판 만들기(4) - 수정하기 본문
Spring legacy 프로젝트 게시판 만들기(3) - 상세조회
이전글 Spring legacy 프로젝트 게시판 만들기(2) - 전체 조회 이전 글 Spring legacy 프로젝트 게시판 만들기(1) - 설정 spring으로 간단한 흐름과 기능적으로 동작하는 게시판을 만들 예정입니다. Jungsangjin
cronex.tistory.com
소스코드
이번엔 게시물 수정을 해보도록 하겠습니다.
게시물 페이지에서 수정하기를 누르면 해당 게시물을 수정 할 수 있도록 진행해 보도록 하겠습니다.
수정하기 버튼을 눌렀을 때 수정 페이지로 넘어갈 수 있도록 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와 같은 폴더 레벨에 구성하도록 하겠습니다.
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_LEVEL 과 BOARD_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>
잘 적용되는 것을 볼 수 있습니다. 이제 제목 또는 내용을 수정 한 후에 수정하기 버튼을 누르면
- 해당 게시물의 수정 내용이 적용되고 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 수정이 되는지 확인해 보도록 하겠습니다.
이제 수정하기 버튼을 누르고 난 후 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();
}
}
마지막으로 브라우저에서 확인해 보도록 하겠습니다.
수정페이지에서 수정하기 버튼을 누르면
수정되고 난 후 detail 페이지로 redirect 되는 것을 확인할 수 있습니다.
'spring-mvc > board' 카테고리의 다른 글
Spring legacy 프로젝트 게시판 만들기(5 - 2) - 게시판 페이징 view (0) | 2021.06.21 |
---|---|
Spring legacy 프로젝트 게시판 만들기(5 - 1) - 게시판 페이징 (0) | 2021.06.21 |
Spring legacy 프로젝트 게시판 만들기(3) - 상세조회 (0) | 2021.06.19 |
Spring legacy 프로젝트 게시판 만들기(2) - 전체 조회 (0) | 2021.06.17 |
Spring legacy 프로젝트 게시판 만들기(1) - 설정 (0) | 2021.06.13 |