[Mybatis] delete 여러 테이블 데이터 한번에 삭제하기

 

회원탈퇴 관련 코드를 작성하는 과정에서

해당 회원과 관련된 모든 테이블의 데이터까지 같이 삭제해야 하는 경우가 생겼다

 

* xml에서 한번에 처리할 수 있는 방법으로 적용

1) xml에 여러 개의 DELETE문을 기입해 주고

2) DELETE문 하나 안에서도 JOIN으로 처리해야 하는 경우

     JOIN 된 테이블 데이터를 모두 삭제해 주는 방법을 적용시켜 보았다

 

user.xml
<delete id="deleteUserData">

    DELETE tpsh, tu
    FROM tb_user tu
        LEFT JOIN tb_push_send_hist tpsh
            ON tu.USER_ID = tpsh.RECV_USER_ID
    WHERE tu.USER_SN = #{userSn};

    DELETE FROM tb_user_noti
    WHERE USER_SN = #{userSn};

    DELETE FROM tb_user_setup
    WHERE USER_SN = #{userSn};

</delete>

 

UserDAO.java
int deleteUserData(@Param("userSn") String userSn);

 

UserServiceImpl.java
int deleteUserCnt = userDAO.deleteUserData(delUserVO);
if(deleteUserCnt < 1) {
    throw new InternalServerException("회원탈퇴 실패");
}

 

return 값 문제점과 해결방안

삭제 후 리턴 값 deleteUserCnt을 받아오는 과정에서 삭제된 데이터가 있음에도 불구하고

0이 리턴되는 상황이 생겨 여러 가지 해본 결과

 

처음 실행되는 DELETE문에서의 결괏값에 따라 최종 return이 되는 것을 파악했다

즉, 무조건 데이터가 삭제되어야 하는 tb_user를 맨 위에 위치시키면 내가 원하는 결괏값을 받을 수 있다