자율 학습/학습

int에 null을 담을 수 없음 (없는 데이터 조회, 즐겨찾기 구현)

60cod 2022. 10. 7. 16:26

DEL이 1이면 즐겨찾기 한 상태, 0이면 취소한 상태, 없으면 한 번도 안 눌러본 상태

즐겨찾기 체크하는 쿼리를 아래처럼 짰는데

<!-- 내가 이 상점을 즐겨찾기 했는지 -->
<select id="myFav" resultType="Integer"
        parameterType="hashmap">		
    SELECT DEL
    FROM MARKET_FAV
    WHERE MEM_NO = #{sMemNo}
    AND MK_NO = #{marketNo}
</select>
//내가 이 상점을 즐겨찾기 했는지
String myFav = Integer.toString(dao.getInt("main.myFav", params));
if(myFav == null || myFav == "" || myFav == "undefined") {
    model.put("myFav", 2);
} else {
    model.put("myFav", Integer.parseInt(myFav));
}

 

문제는 컨트롤러에서 dao의 getInt로 조회해서 가져왔더니 데이터가 없을 때는 아예 에러가 나버림

int는 null을 담지 못해서

 

그래서 getString으로 조회했더니 이번엔 데이터가 없는 건 조회하는데

데이터가 있는 경우(0이거나 1일 때)는 에러가 나버렸다.

조회가 안 되는 게 아니고 그냥 에러가 나서 멈춰버렸음...

 

나는 두 경우 다 조회가 되어야 하는데 어떡하지 하다가

OUTER JOIN NVL을 사용하기로 함!

없는 데이터는 자가 조인 해도 여전히 없으니 번호 유지용으로 다른 테이블과 조인해야 하고

OUTER JOIN 쓰면 이제 NVL도 쓸 수 있게 된다.

 

그래서 아래처럼 바꿈

데이터가 없을 때는 2를 뽑기로 했다.

<select id="myFav" resultType="Integer"
        parameterType="hashmap">
    SELECT NVL(MF.DEL, 2)AS DEL
    FROM MARKET M LEFT OUTER JOIN (SELECT DEL, MK_NO
                                    FROM MARKET_FAV
                                    WHERE MEM_NO = #{sMemNo}
                                    AND MK_NO = #{marketNo})MF
                               ON M.MK_NO = MF.MK_NO
    WHERE M.MK_NO = #{marketNo}
</select>
//내가 이 상점을 즐겨찾기 했는지
int myFav = dao.getInt("main.myFav", params);
model.put("myFav", myFav);

 

 

그래서 이제 스크립트로 받아서 상황 맞춰 그리면 됨..

 

 

+ 그래도 에러가 나길래 뭔가 했더니

resultType을 해시맵으로 받고 있었음 ㅠㅠㅠㅠㅠ

Integer로 타입 맞춰줘야 한다!!!!!!!!

 

그리고 try~catch를 생활화 하자.....

코드 꼼꼼하게 읽으며 분석하는 것도 좋지만 시간 아껴 코드 더 짜야지..