오늘은 CRUD에서 마지막인 Delete를 직접 구현 및 적용 시켜보겠다. 배울 때는 쉬웠던 것 같은데 막상 적용하려니까 잘 기억이 남지 않지만, 이렇게 해야만 오류를 겪어보면서 새로운 도약을 할 수 있지 않을까?

자 그럼 시작해보자.


MemerMpp.xml
	<update id="updateDelete"> 가짜 삭제
			UPDATE infrMember SET ifmmDelNy = 1 WHERE 1=1 AND ifmmSeq = #{ifmmSeq}
	</update>
	
	<delete id="delete"> // 진짜 삭제
		DELETE FROM	infrMember WHERE 1=1 AND ifmmSeq = #{ifmmSeq}
	</delete>

진짜삭제와 가짜삭제를 나눠주는 이유는

가짜삭제는 DelNy를 0에서 1로 바꿔주면서 데이터만 안보이게하지만, 워크벤치에는 데이터를 남게 하도록 하기위해서 사용하는 것이다. 그렇게하면 개발자에게도 고객에게도 보기좋게 작동 할 수 있다.

진짜삭제는 말그대로 데이터베이스에서도 다 삭제되는것을 말하며, 신중해야 할 필요성이 있다.

 

MemberDao.java
// delete
	public int delete(MemberVo vo) { return sqlSession.update(namespace + ".delete", vo);}
	public int updateDelete(MemberVo vo) { return sqlSession.update(namespace + ".updateDelete", vo);}

다음 값들을 MemberDao.java에 넣어준다.

 

MemberService.java
	public int delete(MemberVo vo) throws Exception;
	public int updateDelete(MemberVo vo) throws Exception;

 

 

다음 코드들을 MemberService.java에 삽입해준다.

 

MemberServiceImpl.java

 

MemberServiceImpl에 F2를 눌러도되고 

 

이렇게 직접 오버라이드를 생성 해주어도 된다.

 

	@Override
	public int delete(MemberVo vo) throws Exception {
		return dao.delete(vo);
	}
	@Override
	public int updateDelete(MemberVo vo) throws Exception {
		return dao.updateDelete(vo);
	}​

다음을 MemberServiceImpl.java 에 넣어준다.

 

MemberController.java
	@RequestMapping(value = "/member/memberDele")
	public String Memberdelete(MemberVo vo, RedirectAttributes redirectAttributes) throws Exception {
	
		service.delete(vo);
		redirectAttributes.addAttribute("thisPage=" + vo.getThisPage());
		redirectAttributes.addAttribute("shOption=" , vo.getShOption());
		redirectAttributes.addAttribute("shValue=" , vo.getShValue());
		
		return "redirect:/member/memberView?ifmmSeq="+ vo.getIfmmSeq();
	}

진짜삭제

	@RequestMapping(value = "/member/memberNele")
	public String MemberupdateDelete(MemberVo vo, RedirectAttributes redirectAttributes) throws Exception {
		
		service.updateDelete(vo);
		redirectAttributes.addAttribute("thisPage=" + vo.getThisPage());
		redirectAttributes.addAttribute("shOption=" , vo.getShOption());
		redirectAttributes.addAttribute("shValue=" , vo.getShValue());
		
		return "redirect:/member/memberView?ifmmSeq="+ vo.getIfmmSeq();
	}

가짜삭제

 

다음 오류는 간단하게 import 눌러주면 된다. or (Ctrl + Shift + O )

 

 

MemberView.jsp
<a href="/infra/member/memberDele?ifmmSeq=<c:out value="${item.ifmmSeq}"/>" id="btnDelete">삭제</a>
<a href="/infra/member/memberNele?ifmmSeq=<c:out value="${item.ifmmSeq}"/>" id="btnUpdateDelete">(가짜)삭제</a>

다음 코드를 MemberView.jsp 에 삽입

<script type=text/javascript>
	$("#btnDelete").on("click", function(){ /* // 아이디면 샵 클래스면 점  btn 앞을 말한거다. */
	// confirm("진짜 삭제?") // alert 확인버튼 밖에 없다
	var answer = confirm("삭제 하시겠습니까?")
	if(answer){
	}
		else {
		alert("취소")
		return false;
		}
	});
</script>
<script type=text/javascript>
	$("#btnUpdateDelete").on("click", function(){ /* // 아이디면 샵 클래스면 점  btn 앞을 말한거다. */
	// confirm("진짜 삭제?") // alert 확인버튼 밖에 없다
	var answer = confirm("가짜삭제 하시겠습니까?")
	if(answer){
	}
		else {
		alert("취소")
		return false;
		}
	});
</script>

 

다음 삭제는 신중해야 하기 때문에 자바스크립트로 모달창을 띄우는 것이다.

 

 

 

 

MemberVo.java
	private String shOption;
	private String shValue;
    
    	public String getShOption() {
		return shOption;
	}

	public void setShOption(String shOption) {
		this.shOption = shOption;
	}

	public String getShValue() {
		return shValue;
	}

	public void setShValue(String shValue) {
		this.shValue = shValue;
	}

 

shOption, shValue를 작성해주고, Getter Setter를 해준다.

 

 

결과값

다음과 같은 화면이 나타나고 삭제를 누르게되면

모달창이 한번더 나타난다. 여기서 확인을 누른다면

데이터가 완전히 사라지는것을 확인할 수 가 있다.

 

가짜 삭제 할 경우도 확인을 누르게되면

 

 

UI 상에는 없어지는것을 확인해 볼 수 있지만,

 

워크벤치에 들어가면 남아있다. 이 가짜삭제의 경우는 개발자를 위해서 사용한다고 보면 되겠다.

 

 

 


 

 

 

발생가능한 오류

Field error in object 'vo' on field 'thisPage' ⭐⭐⭐⭐⭐

이 오류는 vo 에 관련된 것이다. 다필요 없고 vo 관련되거니까 다른것보면서 삽질하지말고 vo 관련된것만 봐라 

분명히 400 Error 가 뜰것이다. 본인 같은 경우 @ModelAttribute("vo") 를 적어주지 않아서 발생하였다. 

@ModelAttribute를 사용하지 않으면 jsp에 또는 본인이 보내고싶은 곳에 데이터를 자동으로 보내지못해 데이터를 못받는 상황이 나타난다. 정말중요하다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

복사했습니다!