스프링 프레임워크/쇼핑몰 프로젝트

[Spring][쇼핑몰 프로젝트][48] 댓글 수정 - 1

Kim VamPa 2022. 1. 17. 10:00
728x90
반응형
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188

 

목표

댓글 수정 기능 구현

 댓글 수정 기능 구현을 목표로 합니다.

 

 

순서

1. 개요

2. 댓글 수정 요청 처리

 2.1 Mapper

 2.2 Service

 2.3 Controller

3. 댓글 수정 팝업창 뷰 반환

 3.1 Mapper

 3.2 Service

 3.3 Controller

 

1. 개요

 이번 포스팅부터 댓글 수정 기능 구현을 목표로 합니다. 아래는 댓글 수정 작업 흐름입니다.

 

 - 회원이 자신이 작성한 댓글의 '수정' 버튼을 클릭한다.

 - 수정을 할 수 있는 팝업창이 뜬다.

 - 팝업창에는 자신이 기존에 작성했던 평점, 댓글이 출력되어 있다.

 - 회원은 자신이 수정하고자 한느 부분을 수정한다.

 - 수정을 한 후 "수정"버튼을 클릭한다.

 - 서버에 댓글 수정 요청이 이루어지고, 서버가 처리를 완료하면 수정 팝업창이 닫힌다.

 - '상품 상세 페이지'의 댓글에 수정된 내용이 바로 반영된다.

 

 뷰에서는 기존 댓글 등록에 사용했던 팝업창 양식을 활용하여 수정 팝업창을 만들 것이며, 서버에서의 수정 처리는 여태까지의 DB 데이터를 수정하던 것과 다를 바 없습니다. 서버, 뷰 구현으로 나누어서 진행할 것이며 이번 포스팅에서는 서버 구현을 할 것입니다.

 

 두 가지의 URL 매핑 메서드를 만들 것입니다. 하나는 댓글 수정 요청을 처리하는 메서드, 다른 하나는 댓글 팝업창 뷰를 요청하는 메서드입니다. 

 

2. 댓글 수정 요청 처리

2.1 Mapper

 

ReplyMapper 인터페이스

 

 com.vam.mapper 패키지의 ReplyMapper 인터페이스에 댓글 수정 Mapper 메서드 선언부를 작성합니다.

 

 - 수정 쿼리가 정상적으로 수행되었을 때 1을 반환받을 수 있도록 반환 타입을 int타입으로 지정했습니다.

 - 수정 관련 데이터는 ReplyDTO를 통해 주고받을 것이기 때문에 파라미터를 ReplyDTO 타입을 지정했습니다.

 

	/* 댓글 수정 */
	public int updateReply(ReplyDTO dto);

 

그림 2-1

 

 

ReplyMapper.xml

 

 src/main/resources/com/vam/mapper 경로의 ReplyMapper.xml에 인터페이스에서 선언한 메서드가 실행할 쿼리문을 작성합니다.

 

  	<!-- 댓글수정 -->
  	<update id="updateReply">
  	
  		update vam_reply set content = #{content}, rating = #{rating}
  		where replyId = #{replyId}
  		
  	</update>

 

그림 2-2

 

 

2.2 Service

 

ReplyService 인터페이스

 

 com.vam.service 패키지의 ReplyService 인터페이스에 댓글 수정 요청을 처리할 Service 메서드 선언부를 작성합니다.

 - Mapper메서드와 마찬가지 이유로 반환 타입과 파라미터를 아래 코드와 같이 지정했습니다.

 

	/* 댓글 수정 */
	public int updateReply(ReplyDTO dto);

 

 

 

ReplyServiceImpl

 

 com.vam.service 패키지의 ReplyServiceImpl 클래스에 인터페이스에서 선언한 메서드를 오버라이딩 하여 군현 부에는 댓글 수정 Mapper 메서드를 호출하는 코드를 작성합니다.

 

	@Override
	public int updateReply(ReplyDTO dto) {
		
		int result = replyMapper.updateReply(dto); 
		
		return result;
	}

 

그림 2-4

 

 

2.3 Controller

 com.vam.controller 패키지의 ReplyController 클래스에 '댓글 수정 요청'을 처리하는 URL 매핑 메서드를 작성합니다.

 

 - 댓글 수정 요청은 post 메서드 방식으로 "/reply/update" url 경로를 타도록 지정했습니다.

 - 뷰에 따로 데이터를 반환하지 않도록 void를 작성했습니다. 

 - 뷰로 전달받은 데이터는 replyId, content, rating에 대한 정보를 넘겨받기 받을 것이기 때문에 이를 다 담을 수 있는 ReplyDTO 타입을 파라미터로 지정했습니다.

 

	/* 댓글 수정 */
	@PostMapping("/update")
	public void replyModifyPOST(ReplyDTO dto) {
		replyService.updateReply(dto);
	}

 

그림2-5

 

 

3. 댓글 수정 팝업창 뷰 반환

 작성해 줄 뷰를 반환해주는 URL 매핑 메서드는 뷰를 반환해주는 메서드여서 리뷰 관련 요청이지만 ReplyController 클래스에 작성할 수 없습니다. 따라서 BookController에 메서드를 추가해 줄 것입니다. 

 

 댓글 팝업창에는 회원이 작성했던 데이터가 출력되어야 합니다. 따라서 DB에서 댓글 데이터를 꺼내오는 Service 메서드를 만들어 줄 것입니다. 

 

3.1 Mapper

ReplyMapper 인터페이스

 

  com.vam.mapper 패키지의 ReplyMapper 클래스에 회원이 작성한 댓글 데이터를 꺼내오는 Mapper 메서드 선언부를 작성합니다.

 

 - 댓글 데이터가 담을 수 있는 ReplyDTO 클래스를 반환 타입으로 지정했습니다.

 - replyId 값을 가지고 테이블의 찾고자 하는 행을 찾기 때문에 파라미터로 int 타입의 replyId 변수를 작성했습니다.

 

	/* 댓글 한개 정보(수정페이지) */
	public ReplyDTO getUpdateReply(int replyId);

 

그림 3-1

 

 

ReplyMapper.xml

 

 src/main/resources/com/vam/mapper 경로의 ReplyMapper.xml 파일에 인터페이스에서 선언한 메서드가 실행할 쿼리문을 작성합니다.

 

 - replyId를 조건으로 행의 데이터를 찾아서 반환해주는 쿼리문입니다.

 

	<select id="getUpdateReply" resultType="com.vam.model.ReplyDTO">
	
		select * from vam_reply
		where replyId = #{replyId}
		
	</select>

 

 

 

 

3.2 Service

ReplyService 인터페이스 

 

com.vam.service 패키지의 ReplyService 인터페이스에 지정한 댓글 정보를 반환 해주는 메서드 선언부를 작성합니다.

 

	/* 댓글 한개 정보(수정페이지) */
	public ReplyDTO getUpdateReply(int replyId);

 

그림 3-3

 

 

ReplyServiceImpl 

 

 com.vam.service 패키지의 ReplyServiceImpl에 인터페이스에서 선언한 메서드를 오버라이딩 하여 구현부에 앞서 작성한 Mapper 메서드를 호출하고 반환받은 값을 반환해주는 구현부를 작성합니다.

 

	@Override
	public ReplyDTO getUpdateReply(int replyId) {
		
		return replyMapper.getUpdateReply(replyId);
	}

 

그림 3-4

 

 

 

3.3 Controller

 com.vam.controller 패키지의 BookController 구현부 상단에  ReplyService를 의존성 주입해줍니다.

 

	@Autowired
	private ReplyService replyService;

 

 

 

 

리뷰 수정 팝업창 뷰를 반환해주는 url 매핑 메서드를 작성합니다.

 

 - 뷰로부터 replyId, bookId, memberId를 전달받아야 하기 때문에 파라미터로 ReplyDTO타입의 변수를 선언했고, 뷰로 데이터를 넘겨주기 위해 Mdoel 타입의 변수를 선언해주었습니다.

 - 댓글 수정대와 마찬가지로 팝업창에 어떠한 상품(책)에 관한 수정인 지를 알 수 있도록 getBookIdName Service 메서드를 호출하여 반환받은 값을 Model 객체로 뷰로 보내줍니다.

 - 이번 포스팅에서 작성한 getUpdateReply Service 메서드를 호출해서 반환받은 댓글 정보를 Model 객체를 통해 뷰로 보내줍니다.

 - 회원 아이디 또한 Model 객체를 통해 뷰로 보내줍니다.

 - view 디렉토리의 replyUpdate.jsp를 반환하도록 반환 값을 작성했습니다.(아직 replyUpdate.jsp는 생성하지 않았습니다.

 

	/* 리뷰 수정 팝업창 */
	@GetMapping("/replyUpdate")
	public String replyUpdateWindowGET(ReplyDTO dto, Model model) {
		BookVO book = bookService.getBookIdName(dto.getBookId());
		model.addAttribute("bookInfo", book);
		model.addAttribute("replyInfo", replyService.getUpdateReply(dto.getReplyId()));
		model.addAttribute("memberId", dto.getMemberId());
		
		return "/replyUpdate";
	}

 

그림 3-6

 

 

REFERENCE

  •  

 

 

DATE

  • 2020.01.17

 

728x90
반응형