IT_Programming/Dev Libs & Framework

[iBatis] HashMap을 resultClass로 사용시 문제

JJun ™ 2013. 2. 26. 16:03


 출처: http://blog.naver.com/goolungsoi/10091410173


 


 

아래와 같이 HashMap을 resultClass로 사용시 오라클과 MS-SQL 을 둘다 지원을 못하는 문제가 있다.

 

 

<select id="selectTableA" resultClass="java.util.HashMap">
    SELECT id, name
    FROM tableA

 

</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 id, name
    FROM tableA

 

</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") 을 사용해도 결과는 똑같다.

     }