오늘은 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에 또는 본인이 보내고싶은 곳에 데이터를 자동으로 보내지못해 데이터를 못받는 상황이 나타난다. 정말중요하다.
'Front' 카테고리의 다른 글
[Spring] Membermpp.xml 파일 절대사항 (0) | 2022.04.06 |
---|---|
[Spring] 자바와 데이터베이스 연동하기 위한 작업 (0) | 2022.04.04 |
[Spring] Validation 적용시키기 (0) | 2022.04.01 |
[Spring] c:out 태그 란? (0) | 2022.03.29 |
[Spring] POST 방식과 GET 방식 차이 (0) | 2022.03.28 |