[iBatis] HashMap을 resultClass로 사용시 문제
출처: http://blog.naver.com/goolungsoi/10091410173
아래와 같이 HashMap을 resultClass로 사용시 오라클과 MS-SQL 을 둘다 지원을 못하는 문제가 있다.
<select id="selectTableA" resultClass="java.util.HashMap">
</select>
|
(1) 오라클의 경우
- HashMap에서 결과값을 읽을때 무조건 대문자로 컬럼명을 적어주어야 한다.
List list = TableADaoImpl.selectTableA(); HashMap resultMap = null; String id = null, name = null;
for(int i = 0; i < list.size(); i++) { resultMap = (HashMap) list.get(i); id = resultMap.get("ID"); name = resultMap.get(NAME); }
|
(2) MS-SQL의 경우
- HashMap에서 결과값을 읽을때, 쿼리에서 사용한 컬럼명의 대소문자로 적어주어야 한다.
List list = TableADaoImpl.selectTableA(); HashMap resultMap = null; String id = null, name = null;
for(int i = 0; i < list.size(); i++) { resultMap = (HashMap) list.get(i); id = resultMap.get("id"); name = resultMap.get("name"); }
|
<< 해결책 >>
- commons-collections-3.2.x.jar 에 있는
org.apache.commons.collections.map.CaseInsensitiveMap 클래스를 사용하여
아래와 같이 처리하면 해결된다.
<select id="selectTableA" resultClass="org.apache.commons.collections.map.CaseInsensitiveMap">
</select>
List list = TableADaoImpl.selectTableA(); CaseInsensitiveMap resultMap = null; String id = null, name = null;
for(int i = 0; i < list.size(); i++) { resultMap = (CaseInsensitiveMap) list.get(i); id = resultMap.get("ID"); // resultMap.get("ID") 를 사용해도 결과는 똑같다. name = resultMap.get("NAME"); // resultMap.get("NAME") 을 사용해도 결과는 똑같다. }
|