본문 바로가기

프로그래밍

[java/jsp]mybatis hashmap 사용법 그리고 사용간 java.lang.Integer cannot be cast to java.lang.String 오류

[java/jsp]mybatis hashmap 사용법 그리고 사용간 java.lang.Integer cannot be cast to java.lang.String 오류

간단히 사용법을 정리하면 

<select id ="userSelect" parameterType="int" resultType="HashMap">
     query내용 작성
</select>

이렇게 되겠습니다.

결과는 컬럼명이 key가 되며 데이터가 value가 됩니다.


자 이제 오류에 대해서 얘기해보겠습니다.

java.lang.Integer cannot be cast to java.lang.String

문자그대로 Integer형인 내용을 String으로 출력하고자 할 때 발생하였습니다.
어디서 어떻게 이런 오류가 발생하였는지 정리해보겠습니다.

mybatis를 사용하면서 select문에서 반환값을 hashmap으로 받도록 설정하였습니다.
저같은 경우는 hashmap을 javascript나 php에서 json패턴 사용하듯이 사용할 때 많이 썼었습니다.



아무튼 이렇게 되겠거니 하면서 이녀석을 끌어왔지요.
5개 컬럼을 끄집어 내는 select문을 사용하였었고, 그 중 몇가지 index로 접근하여 데이터를 꺼내고자 하였습니다.


이런식으로 말이지요.
오류는 바로 이곳에서 발생하였습니다.
여기서 사용되는 String자료형은 index인 OPTDT_PT뿐입니다.
그렇다면 오류는 저 녀석이겠지요.



이런식으로 단순하게 결과값만 보려는데 오류가 났다는 것에서 추측할 수 있었습니다.
System.out.println()이 파라미터로 Integer가 왔던 String이 왔던 안에서 잘못된 연산이나 형변환을 하지 않는 이상
나타날리 없다고 추측했습니다.

그런데 너무도 당연한 일을 스쳐지나갔다가 일이 발생한 것입니다. 
바로 returnType 이였습니다...
사실 이걸 사용하기 전에 mybatis의 map에서의 사용을 찾다가 외국사람들이 hashmap이라고
그냥 소문자로만 해도 된다고 넘긴것이 되는 구나 하고 여겼고, 
debug에서도 값이 담겨 있었지요...  그래서 완전 다른방향으로 생각했던 것인데,

아마도 소문자로 hashmap을 적은 것은 mybatis-config.xml에서 typealias에 설정을 했을 것으로 추측해봅니다.

String형이나 int 형 처럼 기본 자료형으로 여긴 것이죠..
기본을 잊었다가 아주 크게 깨달았습니다..


최초 설정부터 잘 확인했어야하는데... 부주의함이 주의력을 키워줌과 동시에 화도 키워주네요 ㅠㅠ