자율 학습/학습
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를 생활화 하자.....
코드 꼼꼼하게 읽으며 분석하는 것도 좋지만 시간 아껴 코드 더 짜야지..