진이의 Developer Story
(6) Spring+MyBatis 게시판 만들기 - 수정 및 삭제 추가 본문
기본적인 틀만 잡아놓고 방치한지 한참 되었습니다만,
콩콩님 요청으로 수정 및 삭제를 추가해보려고 합니다.
1. BoardService.java (인터페이스) 수정
public interface BoardService {
public List<BoardVO> getBoardList();
public BoardVO getBoardView(int idx);
public int insertBoard(BoardVO board);
// updateBoard 추상메소드 추가
public int updateBoard(BoardVO board);
// deleteBoard 추상메소드 추가
public int deleteBoard(int idx);
public int updateHit(int idx);
}
위와 같이 인터페이스의 2개의 추상메소드를 추가합니다.
2. BoardServiceImpl.java (인터페이스를 상속받은 클래스) 수정
public class BoardServiceImpl implements BoardService {
@Resource(name="boardMapper")
private BoardMapper boardMapper;
@Override
public List<BoardVO> getBoardList() {
// TODO Auto-generated method stub
return boardMapper.getBoardList();
}
@Override
public BoardVO getBoardView(int idx) {
// TODO Auto-generated method stub
return boardMapper.getBoardView(idx);
}
@Override
public int insertBoard(BoardVO board) {
// TODO Auto-generated method stub
return boardMapper.insertBoard(board);
}
// 오버라이드
@Override
public int updateBoard(BoardVO board) {
// TODO Auto-generated method stub
return boardMapper.updateBoard(board);
}
// 오버라이드
@Override
public int deleteBoard(int idx) {
// TODO Auto-generated method stub
return boardMapper.deleteBoard(idx);
}
@Override
public int updateHit(int idx) {
// TODO Auto-generated method stub
return boardMapper.updateHit(idx);
}
}
서비스 인터페이스를 만들었으니 오버라이드를 해줍니다.
그런데, 여기까지 하시면 분명 에러가 날텐데요.
insertBoard, deleteBoard 메소드에서 호출하는 boardMapper 객체가 insertBoard, deleteBoard 메소드가 없기 때문이죠.
3. BoardMapper.java (Mapper 인터페이스) 수정
그럼 추가를 해주면 되겠죠.
아주 간단하죠~
public interface BoardMapper {
public List<BoardVO> getBoardList();
public BoardVO getBoardView(int idx);
public int insertBoard(BoardVO boardVO);
// updateBoard 추상메소드 추가
public int updateBoard(BoardVO boardVO);
// deleteBoard 추상메소드 추가
public int deleteBoard(int idx);
public int updateHit(int idx);
}
4. BoardMapper.xml (Mapper) 수정
그럼 이제는 쿼리를 작성해보겠습니다.
UPDATE, DELETE만 할줄알면 되겠네요.
<mapper namespace="com.sample.board.service.BoardMapper">
<resultMap id="boardMap" type="com.sample.board.vo.BoardVO">
<result property="idx" column="idx" />
<result property="title" column="title" />
<result property="content" column="content" />
<result property="id" column="id" />
<result property="hit" column="hit" />
<result property="date" column="date" />
</resultMap>
<select id="getBoardList" resultMap="boardMap">
SELECT
idx, title, content, id, hit, date
FROM BOARD
ORDER BY idx DESC
</select>
<select id="getBoardView" parameterType="int" resultType="board">
SELECT
idx, title, content, id, hit, date
FROM BOARD
WHERE idx = #{idx}
</select>
<insert id="insertBoard" useGeneratedKeys="true" keyProperty="idx" parameterType="board">
INSERT
INTO BOARD
( idx, title, content, id )
VALUES
( #{idx}, #{title}, #{content}, #{id} )
</insert>
// update 쿼리 추가
<update id="updateBoard" parameterType="board">
UPDATE BOARD
<set>
<if test="title != null and title != ''">TITLE = #{title},</if>
<if test="content != null and content != ''">CONTENT = #{content}</if>
</set>
WHERE idx = #{idx}
</update>
// delete 쿼리 추가
<delete id="deleteBoard" parameterType="int">
DELETE
FROM BOARD
WHERE idx = #{idx}
</delete>
<update id="updateHit" parameterType="int">
UPDATE BOARD
SET hit = hit + 1
WHERE idx = #{idx}
</update>
</mapper>
update 문에서 사용된 set은 동적쿼리를 만들때 사용합니다.
title이 null이거나 공백이 아닐때 update가 되고, content도 마찬가지겠죠.
5. BoardController 추가
컨트롤러에 추가 해줍니다.
public class BoardController {
private Logger logger = Logger.getLogger(BoardController.class);
@Resource(name="boardServiceImpl")
private BoardService boardService;
@RequestMapping(value = "/getBoardList.do")
public ModelAndView getBoardList() {
List<BoardVO> list = boardService.getBoardList();
ModelAndView mv = new ModelAndView("list");
mv.addObject("list", list);
return mv;
}
@RequestMapping(value = "/getBoardView.do", method=RequestMethod.GET)
public ModelAndView getBoardView(@RequestParam("idx") int idx) {
ModelAndView mv = new ModelAndView("view");
// 조회수 증가
boardService.updateHit(idx);
BoardVO board = boardService.getBoardView(idx);
mv.addObject("board", board);
return mv;
}
@RequestMapping(value = "/insertBoardForm.do")
public String insertBoardForm(@ModelAttribute("boardVO") BoardVO boardVO ) {
return "insert";
}
@RequestMapping(value = "/insertBoard.do", method=RequestMethod.POST)
public String insertBoard(@ModelAttribute("boardVO") BoardVO boardVO ) {
boardService.insertBoard(boardVO);
return "redirect:getBoardList.do";
}
@RequestMapping(value = "/updateBoardForm.do", method={RequestMethod.POST, RequestMethod.GET})
public ModelAndView updateBoardForm(@RequestParam(value="idx") int idx, @ModelAttribute("boardVO") BoardVO boardVO ) {
ModelAndView mv = new ModelAndView("update");
BoardVO board = boardService.getBoardView(idx);
mv.addObject("boardVO", board);
return mv;
}
@RequestMapping(value = "/updateBoard.do", method=RequestMethod.POST)
public String updateBoard(@ModelAttribute("boardVO") BoardVO boardVO ) {
boardService.updateBoard(boardVO);
return "redirect:getBoardList.do";
}
@RequestMapping(value = "/deleteBoard.do", method=RequestMethod.GET)
public String deleteBoard(@RequestParam(value="idx") int idx) {
boardService.deleteBoard(idx);
return "redirect:getBoardList.do";
}
}
삭제의 경우는 폼이 따로 필요없습니다.
글읽기 화면에서 삭제버튼만 만들어주면 되니까요~
6. view.jsp 수정
삭제와 수정버튼을 추가해보겠습니다.
<form action="getBoardList.do">
<table style="width:500px; border:1px solid black">
<tr>
<td>글번호</td>
<td>${board.idx }</td>
</tr>
<tr>
<td>작성자</td>
<td>${board.id }</td>
</tr>
<tr>
<td>글제목</td>
<td>${board.title }</td>
</tr>
<tr>
<td>글내용</td>
<td>${board.content }</td>
</tr>
<tr>
<td>조회수</td>
<td>${board.hit }</td>
</tr>
<tr>
<td>날짜</td>
<td>${board.date }</td>
</tr>
<tr>
<td colspan="2">
<table>
<tr>
<td><button type="button" onclick="location.href='updateBoardForm.do?idx=${board.idx }'">글수정</button></td>
<td><button type="button" onclick="location.href='deleteBoard.do?idx=${board.idx }'">글삭제</button></td>
<td><button>글목록</button></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
7. 마지막으로 update 폼만 작성해보겠습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
<title>게시판</title>
</head>
<body>
<form:form action="updateBoard.do" method="post" modelAttribute="boardVO">
<table style="width:500px; border:1px solid black">
<form:input type="hidden" path="idx"/>
<tr>
<td>글제목</td>
<td><form:input type="text" path="title"/></td>
</tr>
<tr>
<td>작성자</td>
<td><form:input type="text" path="id"/></td>
</tr>
<tr>
<td>글내용</td>
<td><form:textarea style="width: 400px; height: 200px;" path="content" /></td>
</tr>
<tr>
<td><button>글수정</button></td>
<td><input type="button" onclick="location.href='getBoardList.do'" value="글목록"></td>
</tr>
</table>
</form:form>
</body>
</html>
이렇게 작성하시면 될 것 같습니다.
오늘은 코드위주로 적었는데요, 시간이 날때 보충설명 추가하도록 할께요~
'Java > Spring' 카테고리의 다른 글
Spring MVC를 활용한 스마트에디터 2.0 이미지 업로드 (6) | 2016.11.14 |
---|---|
Apache PDFBOX (pdf to image) (1) | 2016.10.27 |
HTML TO EXCEL, PDF (0) | 2016.09.29 |
(5) Spring+MyBatis 게시판 만들기 - 파일 업로드 [작성중] (3) | 2016.08.02 |
구글 Analytics OAuth 2.0 for server side (0) | 2016.04.05 |
Comments