[Spring][쇼핑몰 프로젝트] 23. 작가 정보 삭제 구현

YB·2023년 2월 25일
0

쇼핑몰

목록 보기
34/40

목표

'작가 수정 페이지'에서 '삭제'버튼을 추가하여 클릭 시 해당 상품 정보의 삭제를 수행하는 기능 구현을 목표로 합니다.

1. Mapper

AuthorMapper.java
상품 정보 삭제 쿼리를 수행하는 메서드를 AuthorManage.java인터페이스에 추가합니다.

    /* 작가 정보 삭제 */
    public int authorDelete(int authorId);

AuthorMapper.xml
앞서 선언한 메서드가 실행해야 할 태그와 쿼리문을 작성합니다.

    <!-- 작가 정보 삭제 -->
    <delete id="authorDelete">
    	delete from test_author where authorId = #{authorId}
    </delete>

2. Service

AuthorService.java
삭제 Mapper메서드를 호출하는 Service메서드를 작성하겠습니다. AuthorService.java에 아래의 메서드 선언부를 추가합니다.

	/* 작가 정보 삭제 */
	public int authorDelete(int authorId);

AuthorServiceImpl.java
오버라이딩하여 앞서 선언한 메서드의 구현부를 작성합니다.

	/* 작가 정보 삭제 */
	@Override
	public int authorDelete(int authorId) {
		
		log.info("(service)authorDelete...........");
		
		return authorMapper.authorDelete(authorId);
	}

3. Controller

AdminController.java에 상품 정보 삭제 기능을 수행하는 url매핑 매서드를 작성합니다.

우리가 삭제하고자 하는 데이터는 작가 테이블(test_author)의 데이터입니다. 문제는 외래 키 조건으로 인해 작가 테이블을 참조(reference)하고있는 상품 테이블(test_book)이 있다는 점입니다. 참조되지 않고 있는 행을 지운다면 문제가 없지만 만약 참조되고 있는 행을 지우려고 시도를 한다면 '무결성 제약 조건'을 위반 한다는 경고과 함께 SQLIntegrityConstraintViolationException예외가 발생합니다.

따라서 try catch문을 사용하여 참조되지 않는 행을 지울 땐 삭제를 수행하고 '작가 목록'페이지로 1을 전성하도록 하고, 예외가 발생한 상황에는 '작가 목록'페이지로 2를 전송하도록 작성하였습니다.

	/* 작가 정보 삭제 */
	@PostMapping("/authorDelete")
	public String authorDeletePOST(int authorId, RedirectAttributes rttr) {
		
		logger.info("authorDeletePOST..........");
		
		int result = 0;
		
		try {
			
			result = authorService.authorDelete(authorId);
			
		} catch (Exception e) {
			
			e.printStackTrace();
			result = 2;
			rttr.addFlashAttribute("delete_result", result);
			
			return "redirect:/admin/authorManage";
			
		}
		
		return "redirect:/admin/authorManage";
	}

4. View 처리

authorModify.jsp
authorModify.jsp의 버튼이 모여있는 태그에 아래의 버튼 태그를 추가해줍니다.

<button id="deleteBtn" class="btn delete_btn">삭 제</button>

추가해준 버튼이 동작하도록 <script>태그 내부에 아래의 Javascript코드를 추가합니다.

/* 삭제 버튼 */
$("#deleteBtn").on("click", function(e){
	e.preventDefault();
	moveForm.find("input").remove();
	moveForm.append('<input type="hidden" name="authorId" value="${authorInfo.authorId}">');
	moveForm.attr("action", "/admin/authorDelete");
	moveForm.attr("method", "post");
	moveForm.submit();
});

authorModify.css
추가해준 버튼의 css설정을 해주기 위해 authorModify.css파일에 아래의 코드를 추가하였습니다.

.delete_btn{
	background-color: #efcdcd;
}
.delete_btn:hover{
	background-color : #e4a7a7;
}

authorManage.jsp
삭제 기능 수행 후 서버에서 전송받은 데이터에 따라 경고 문구가 출력되도록 <script>코드의 document ready 메서드내에 아래의 코드를 추가합니다. 서버로부터 1을 전달받았으면 정상적으로 삭제를 했다는 의미이기 때문에 '삭제 완료'경고창을, 2를 전달받을 경우 실패하였다는 경고창이 뜨도록 작성을 하였습니다.

	/* 삭제 결과 경고창 */
	let delete_result = '${delete_result}';
	
	if(delete_result == 1){
		alert("삭제 완료");
	} else if(delete_result == 2){
		alert("해당 작가 데이터를 사용하고 있는 데이터가 있어서 삭제 할 수 없습니다.")
	}	

5. 테스트

profile
개인이 공부한걸 작성하는 블로그입니다..

0개의 댓글