본문 바로가기
✨ Back-end/Servlet

[Servlet / JSP / SQL / Template / Session] 회원 관리 폼 만들기 (9) - 게시물 수정 (UPDATE)

by 환풍 2023. 3. 2.
728x90
반응형

이번에는 CRUD의 마지막인 수정(UPDATE)를 해보려고한다.

 

먼저 글쓰기를 눌러 글을 아무렇게나 등록해보았다.

앞에서 했던대로 내 아이디로 들어간 작성자 이름으로 글이 등록됐다 삭제까지 CRD를 모두 구현하였다.

 

 

 

 

 

 


board_detail.jsp

먼저 상세보기 게시글에서 수정을 누르면 board_update.bo로 이동하게 만들자.

그리고 이동할때 {board.boardNum} 데이터를 가져가야한다.

BoardController.java 서블릿

수정(UPDATE)는 다른 것들과 다르게 서블릿에서 작업이 두번 필요하다.

먼저 첫번째 board_update.bo로 받은 곳을 보자.

boardNum을 받아와 알맞는 int로 변환 시켜주었고, 앞에 게시글 상세조회때 만들었던 selectBoardDetail을 사용할 수 있다.

board-mapper.mxl

조회된 쿼리에 boardNum를 집어넣어 board라는 이름으로 객체 자체board_update.jsp에 넘겨준다.

 

 board_update.jsp

이곳이 아주 중요하다. 서블릿에서 받아온 boardNum 데이터를 우선 hidden으로 받아온 뒤, value를 이용해 저장하자.

이후, 다시 보내야하므로 name="boardNum"을 사용해줘야한다.

form을 이용해 input 태그나 textarea에 있는 name 데이터들을 보내게 되는데,

그렇기 때문에 암만 눈에 보이는 board.boardNum 값이 존재한다 한들

input, textarea 태그가 감싸져있지 않으면 데이터를 보낼 수가 없기 때문이다.

 

이후 수정할 title값과 content 값을 name 속성을 이용해 보내주고, board_update_write.bo로 돌아가자.

BoardController.java 서블릿

이제 2번 작업을 해주어야 한다. hidden으로 받았던 boardNum 값을 받아와 다시 한번 숫자형 변수로 바꿔준다.

이후 바꿔줄 title과 content 값도 받아온 뒤, BoardDTO 객체를 새로 생성해 board 값에 각각 초기화 시켜준다.

이것을 적용하려면 update쿼리가 필요한대, 만들러가보자.

board-mapper.xml

게시글을 수정한다. 제목과 내용만 수정할 것이고, 조건은 게시판 번호가 일치하는 것으로 수정하는 것이다.

 

매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음
2. 채워줄 값이 하나일 경우
 2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나
 2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나
3. 채워줄 값이 여러개인 경우 : 매개변수는 DTO 객체.
리턴타입 : 쿼리 실행 결과를 어떻게 받아올지에 대한 정의
INSERT, UPDATE, DELETE 쿼리 실행 결과는
리턴타입을 int 혹은 void 사용하면됨.
SELECT 쿼리 결과의 리턴타입은 크게 두 가지로 나뉨.
조회결과 데이터가 무조건 한줄만 조회 : DTO 객체.
조회 결과 데이터가 0줄이상 가변적일 경우 : List<DTO> 객체.

BoardService.java 인터페이스

title과 content 두개 이므로 여러개, 따라서 BoardDTO 객체 매개변수로 지정한다.

 

BoardServiceImpl.java 클래스

 

BoardController.java 서블릿

이후 다시 돌아와 boardService 쿼리에 board를 넣어 업데이트 완료를 시켜준 뒤,

boardNum이 가지고 있는 데이터를 갖고 boardDetail.bo로 가게된다.

 

여기서 다시 board_detial.jsp로 간다면,


 

이렇게 수정이 깔끔하게 된 것을 확인할 수 있다.

 

 

단, 처음과 달리조회수가 달라졌다.

이 기능은 다음 포스팅에 추가적으로 해보려고한다.

728x90
반응형

댓글