Programming/스프링(spring) - Enterprise

스프링(spring)/ 게시판 구축 3(게시물 수정 및 삭제)

esoog Polaris 2023. 7. 20. 17:08
반응형

1. 게시물 생성은 다 알겠는데; 뭔가 글을 수정도 좀 하고 싶어졌다.

modify.jsp 파일을 만들어서 작성 구현 코드와 비슷하게 만들어준다.

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
		
<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8">
	<title>수정</title>
</head>

<body>

	<form method="post">
		<label>제목</label>
		<input type="text" name="title" /><br />
		<label>작성자</label>
		<input type="text" name="nick" /><br />
		<label>내용</label>
		<textarea cols="50" rows="5" name="text"></textarea><br />
		<button type="submit">수정</button>
	</form>

</body>

</html>

 

 

 

 

2. 그리고 일단 컨트롤러에 url 매핑부터 get방식으로 추가해 준다.

 

//게시물 수정
@RequestMapping(value = "/modify", method = RequestMethod.GET)
public void getModify() throws Exception {

}

 

 

 

 

3. 수정을 한다는 의미는? 조회의 상세 링크 페이지에서 무언가 클릭 했을 때, 가능해야 하겠지?

view.jsp 파일에 아래 링크를 추가한다.(역시나 idx값으로 서로 매칭시킨다)

 

<div>
    <a href="/board/modify?idx=${view.idx}">수정</a>
</div>

 

* 여기서 드디어 데이터베이스를 활용할 것 같다?는 느낌이 든다. 그럼? 매퍼! 

 

 

 

 

4. boardMapper 파일에 수정 관련 로직 코드를 작성한다.

 

<!-- 수정 -->
<update id="modify" parameterType="com.project.model.BoardVO" >
 update board
  set
   title = #{title},
   text= #{text},
   nick= #{nick}
  where idx= #{idx}
</update>

 

 

 

 

5. 다음은? DAO와 Service 관련 로직을 추가하면 된다.

BoardDAO 파일과 BoardService 파일에

 

// 게시물 수정
public void modify(BoardVO vo) throws Exception;

 

 

BoardDAOImpl 파일에

 

// 게시물 수정
@Override
public void modify(BoardVO vo) throws Exception {
	sql.update(namespace + ".modify", vo);
}

 

 

BoardServiceImpl 파일에

 

//게시물 수정
@Override
public void modify(BoardVO vo) throws Exception {
    dao.modify(vo);
}

* 반환타입 없이 update문을 실행하는 아이이므로.

 

 

 

 

6. 그럼 다시 컨트롤러에서 M과 V를 상호작용 하는 로직으로 컨트롤 해줘야 할 것 같다.(BoardController)

'수정'은 데이터를 수정해 POST 요청으로 update시키는 데 목적이 있으므로, post 컨트롤러도 필요하다.

위에서 get메서드의 로직은 브라우저 요청을 받는 함수이고, 그 아래에 POST 메서드로 추가한다.

 

// 수정(Post)
@RequestMapping(value = "/modify", method = RequestMethod.POST)
public String postModify(BoardVO vo) throws Exception {
 service.modify(vo);
 return "redirect:/board/view?idx=" + vo.getIdx();
}

* vo 객체 .의 Idx게터로 idx값 추출.(BoardVO에서 정의되어 있다.)

 

 

 

 

7. 글을 게시하고 나니 언젠가는 지우고 싶을 때가 있다. 그럼 삭제를 구현하면 된다.

이제는 조금씩 과정이 떠오른다. 조회 상세 페이지(view.jsp 에서 구현하면 될 듯하다.)

수정 밑에 링크를 추가한다.

 

<a href="/board/delete?idx=${view.idx}">삭제</a>

 

 

 

 

8. 삭제는 클릭으로 데이터베이스 삭제까지 이어지는 로직이 어렴풋이 보인다.

그럼? 매퍼!

boardMapper 파일에 쿼리문부터 만든다.

 

<!-- 삭제 -->
<delete id="delete" parameterType="int">
 delete
  from board
 where idx= #{idx}
</delete>

* 객체 생성따위 필요 없이 인덱스 값으로 바로 삭제한다.

 

 

 

 

9. 그럼 DAO와 Service에서 로직을 구현해서 사용하면 된다.

BoardDAO와 BoardService 파일에 아래 코드 추가

 

// 삭제
public void delete(int idx) throws Exception;

 

 

BoardDAOImpl 파일에 아래 코드 추가

 

// 삭제
public void delete(int idx) throws Exception {
     sql.delete(namespace + ".delete", idx);
}

 

 

BoardServiceImpl 파일에 아래 코드 추가

 

// 게시물 삭제
public void delete(int idx) throws Exception {
     dao.delete(idx);
}

 

 

 

 

10. 컨트롤러로 연결시키면 끝난다. BoardController 파일에 아래 코드 추가

 

// 삭제
@RequestMapping(value = "/delete", method = RequestMethod.GET)
public String getDelete(@RequestParam("idx") int idx) throws Exception {
     service.delete(idx);  
     return "redirect:/board/list";
}

확인. 나이스.

728x90