진이의 Developer Story

(6) Spring+MyBatis 게시판 만들기 - 수정 및 삭제 추가 본문

Java/Spring

(6) Spring+MyBatis 게시판 만들기 - 수정 및 삭제 추가

JIN3260 2016. 10. 19. 17:59

기본적인 틀만 잡아놓고 방치한지 한참 되었습니다만,

콩콩님 요청으로 수정 및 삭제를 추가해보려고 합니다.


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>

이렇게 작성하시면 될 것 같습니다.

오늘은 코드위주로 적었는데요, 시간이 날때 보충설명 추가하도록 할께요~

Comments