iBatis에서는 <select> 구문에서 resultCass=”java.util.HashMap” 으로 설정하여서 결과값을 HashMap으로 받는 경우 자동으로 컬럼명을 Key로 데이타를 value로 설정하여 주기때문에 간편하게 사용할 수 있습니다.
하지만, 문제가 있는데 컬럼명을 대문자로만 리턴한다는 것입니다. 자동으로 컬럼명을 Key로 설정하여 주는 것은 고마운 일이긴 하지만 소문자를 사용하는 환경에서 대문자로 컬럼명을 리턴한다는 것은 문제가 있을 수 있습니다.
이러한 경우에는 하드한 해결방법으로는 JDBC 드라이버를 직접 수정해 주는 방법이 있으며 , 소프트한 방법으로는 <resultMap>을 이용하는 방법이 있습니다.
하드한 방법은 DBMS 별로 JDBC 드라이버를 수정해야 하는 불편이 있으므로 별로 추천하지 않습니다.
저는 <resultMap>을 사용하는 것을 추천합니다. 물론 조금 귀찮기는 하지만 <resultMap>을 사용하면 property에 지정한 컬럼명을 Key로 설정해 주기 때문에
대소문자문제는 고민을 하지 않아도 됩니다. 또한 명시적으로 레코드타입을 설정이 가능하기 때문에 가능하다면 <resultMap>을 사용하는 것이 좋겠습니다.
예를 들어 본다면 아래와 같은 설정으로 리턴되는 값들은 모두 대문자로 출력됩니다.
* sqlMap 설정
<select id=”getUser” parameterClass=”java.util.HashMap” resultClass=”java.util.HashMap”>
select user_id , user_name FROM user_list WHERE user_id = #user_id# and user_pass = #user_pass#
</select>
* 결과값
Key = USER_ID , Value = coyote
Key = USER_NAME , Value = 승냥이
하지만, <resultMap>을 사용한다면 우리가 원하는 형태로 리턴값을 조절 할 수 있습니다.
* sqlMap 설정
<resultMap id=”user.info”>
<result property=”user_id” column=”user_id”/>
<result property=”user_name” column=”user_name”/>
</resultMap>
<select id=”getUser” parameterClass=”java.util.HashMap” resultMap=”user.info”>
select user_id , user_name FROM user_list WHERE user_id = #user_id# and user_pass = #user_pass#
</select>
* 결과값
Key = user_id , Value = coyote
Key = user_name , Value = 승냥이