느림보 개발

11. SpringMVC - 게시글 수정 및 삭제 본문

코드 정리/Spring Framework

11. SpringMVC - 게시글 수정 및 삭제

@르르 2023. 1. 30. 13:21

구현할 기능 : 게시글 수정 및 삭제 

 

전체 흐름 : 게시글 상세 페이지에서 수정, 삭제 기능을 사용할 수 있도록 버튼 생성 후 수정, 삭제에 맞는 로직 작성 

수정 같은 경우 → 수정 페이지를 따로 생성하여 원래의 글을 출력하고 그 공간에서 수정할 수 있도록 함 

 

 

jsp

 글 상세페이지 - 글수정, 글 삭제 버튼  

- 파라미터로 dno를 넘겨준다. → 컨트롤러는 dno값을 통해 수정할 글을 불러오게 한다. 

 

<button type="button" class="btn btn-primary btn-modify" onclick="location.href='/board/mydiaryupdate?dno='+'${vo.dno}'">수정</button>
<button type="button" class="btn btn-primary btn-modify" onclick="location.href='/board/mydiarydelete?dno='+'${vo.dno}'">삭제</button>

 

 

 

▶ 글수정 페이지 

- 매핑한 주소로 POST 요청 

- POST요청이므로 CSRF 토큰을 hidden으로 같이 전송 

- 게시글 상세 조회시 dno를 따로 출력하지 않았기 때문에 hidden 으로 심는다. 

 

<form action="/board/mydiaryupdate" method="post">
	<div class="col-md-12">
		<div class="form-group">
			<input type="text" class="form-control" name="title" value=${vo.title } >
		</div>
	</div>
                            
							 .. 생략 .. 
                             
		<input type ="hidden" name=dno value="${vo.dno }">
		<input type="hidden" name="${_csrf.parameterName }" value="${_csrf.token }">
						
					.. 생략 .. 
                    
</form>

 

 

▶글 삭제 

- 게시글 상세페이지에서 바로 처리되도록 하였다. 

 

 

 

 

Controller

 

▶글수정 페이지 

- 글 수정버튼을 통해 글 수정 페이지로 들어 왔을 때, 파라미터로 dno를 전달하였다. 

- dno를 가지고 글 상세페이지 때와 같이 서비스의 readD메서드를 통해 글 정보를 가져와 JSP페이지에 초기 value 값으로 세팅한다. 

 

// 글 수정 GET : 기존 정보 출력 + 수정할 정보 입력 
	@GetMapping("/mydiaryupdate")
	public void getMydiaryupdate(@RequestParam("dno") int dno, Model model) throws Exception {
		log.info("getMydiaryupdate() 호출 - 일기 수정 ");
		log.info("게시글 넘버는 ?? "+dno);
		model.addAttribute("vo",service.readD(dno));
		log.info("getMydiaryupdate() 호출 - 일기 수정 완료 @@ ");
	}
	
	
	
	
//글 수정 POST
	@PreAuthorize("principal.username == #vo.userid")
	@PostMapping("/mydiaryupdate")
	public String posttMydiaryupdate(DiaryBoardVO vo) throws Exception {
		log.info("postMydiaryupdate() 호출 - 일기 수정 ");
		log.info("수정할 정보"+vo);
		
		int cnt = service.updateD(vo);
		log.info("게시글 수정 완료 !!!!!!!!!!!!!!!!!!!!!!!");

		return "redirect:/board/mydiary";
		
	}
	
//  글 삭제 GET
	@PreAuthorize("principal.username == #userid")
	@GetMapping("/mydiarydelete")
	public String deleteGET(@RequestParam("dno")int dno, RedirectAttributes rttr, String userid) throws Exception {
		log.info("deleteGET() 호출 --  다이어리 글 삭제 ");
		log.info("삭제할 게시글 넘버?? "+dno);
		service.deleteD(dno);
		log.info("게시글 삭제 완료 !!!!!!!!!!!!!!!!!!!!!!!");
		return "redirect:/board/mydiary";
	}

 

 

 

 

 

Service, Impl & DAO, Impl

 

// Service -  글 상세
	public DiaryBoardVO readD(Integer dno) throws Exception;
	
// Service - 글 수정 
	public int updateD(DiaryBoardVO vo) throws Exception;
	
// Service - 글 삭제
	public int deleteD(int dno) throws Exception;
    
    
// ServiceImpl - 글 상세
	@Override
	public DiaryBoardVO readD(Integer dno) throws Exception {

		DiaryBoardVO readList = dao.readD(dno);
		
		return readList;
	}

// ServiceImpl - 글 수정 
	@Override
	public int updateD(DiaryBoardVO vo) throws Exception {
		log.info("Service : updateD(DiaryBoardVO vo) 호출");
		int cnt = dao.updateD(vo);
		return 0;
	}

// ServiceImpl - 글 삭제
	@Override
	public int deleteD(int dno) throws Exception {
		int cnt = dao.deleteD(dno);
		return 0;
	}

 

 

// DAO -  글 상세
	public DiaryBoardVO readD(Integer dno) throws Exception;
	
// DAO -  글 수정 
	public int updateD(DiaryBoardVO vo) throws Exception;
		
// DAO -  글 삭제
	public int deleteD(int dno) throws Exception;
    
    
// DAOImpl- 글 상세
	@Override
	public DiaryBoardVO readD(Integer dno) throws Exception {

		return sqlSession.selectOne(NAMESPACE+".readD",dno);
	}
	
	
// DAOImpl- 글 수정 
	@Override
	public int updateD(DiaryBoardVO vo) throws Exception {
		log.info("DAO : updateD(DiaryBoardVO vo) 호출");
		int cnt = sqlSession.update(NAMESPACE+".updateD",vo);
		
		return 0;
	}
	
	
// DAOImpl- 글 삭제 
	@Override
	public int deleteD(int dno) throws Exception {
		log.info("deleteD(int dno) 호출");
		int cnt = sqlSession.delete(NAMESPACE+".deleteD",dno);
		return 0;
		
	}

 

 

 

mapper

 

<!-- 글 상세-->	
	<select id="readD" resultType="com.ddd.domain.DiaryBoardVO">
		select * from tbl_diary_board
		where dno=#{dno}
	</select>
	
<!-- 글 수정 -->
	<update id="updateD">
		update tbl_diary_board
		set title=#{title}, content=#{content}, score=#{score}
		where dno=#{dno}
	</update>
	
	
<!--글 삭제  -->
	<delete id="deleteD">
		delete from tbl_diary_board
		where dno=#{dno}
	</delete>

 

 

 

▼ 수정

 

 

▼ 삭제 

 

Comments