ibatis에서 queryForList와 queryForMap의 차이를 알려주세요..

ibatis에서 queryForList와 queryForMap의 차이를 알려주세요..

작성일 2009.09.23댓글 3건
    게시물 수정 , 삭제는 로그인 필요

보통 리스트를 불러올때 queryForList로 불러 오는데요..

 

queryForMap로 리스트를 맵에 담아 가져오기도 하는것 같던데

 

둘의 차이점이 뭔지 궁금합니다.



profile_image 익명 작성일 -

뭐.. 이거 가끔 헷갈리기도 하죠.

흠..

 

일반적으로 대부분 사람들은  queryForObject , queryForList 를 대부분 사용하죠.

queryForMap을 사용할 겨우 꾀 유용한 경우들이 있는데.

Map 이 유용한것은 그 대표하는 키와 값으로 되어 있기 때문에. 데이터를 가져와 적은수에 루핑 로직을

구현할 수 있다는데 장점이 있겠지요.

 

일단 어떻게 사용하는지 봅시다.

 

*  user table

 ID          NAME

 a           aa

 b           bb

 c           cc

 

* query

<resultMap id="user.select.result" class="java.util.HashMap">

    <result property="id" column="ID"/>

    <result property="name" column="NAME"/>

</resultMap>

<select id="user.select" parameterClass="map" resultMap="user.select.result">

    select * from user

</select>

 

-- 먼저  queyForList 경우.

List list = sqlMapClient.queryForList("user.select",map);

 

-- 결과는

{id=a,name=aa}

{id=b,name=bb}

{id=c,name=cc}

 

-- queryForMap 경우

Map resultMap = sqlMapClient.queryForMap("user,select",map,"id");

 

-- 결과는

a={id=a,name=aa}

b={id=b,name=bb}

c={id=c,name=cc}

 

뭐 내용을 보시면 아시겠다시피 resultMap 에는 미리 지정한 "id" 에 해당하는 값이 key 로 되고

값이 result 로 지정한 객체가 입력되었음을 알 수 있습니다.

(물론 특정 컬럼에 값을 지정할 수도 있죠,인자가 하나 더 있는 메소드를 확인하세요.)

 

-- queryForMap 을 사용한 경우, user 중 id가 "b"  인 행의 name 값을 무엇인가?

System.out.println( resultMap.get("b").get("name") );

만약 List 로 가져왔다면 루핑과 분기문를 써야겠죠.

 

실제 프로젝트 상에서는 코드테이블을 가져올때 유용합니다.

그룹코드에 해당하는 코드내용들을 조회하여 그 일부 코드를 사용하거나 혹은 전체 코드를 사용할

경우 매우 유용하죠.

 

profile_image 익명 작성일 -

메소드 이름 처럼,

메소드가 return 하는 type의 차이가 있겠죠?

 

쿼리가 하나의 record만 읽어 온다면, queryForMap을,

쿼리가 여러 rows를 읽어 온다면, queryForList를 사용하면 될 듯 하네요.

profile_image 익명 작성일 -

 - queryForList 메소드는 한개 이상의 레코드를가졍와서 자바 객체의 List 만드는데 사용하는 거구요

 

List queryForList(String id, Objet parameter) 형식과

List queryForList(String id, Objet parameter, int skip, int max) 형식이 있습니다.

위에 형식은 호출하는 쿼리명과 거기에 필요한 파라메타만 던지는 방법이고

아래 형식은 레코드 결과값을 skip에서 max 값까지의 레코드만 가져오는 방법입니다.

 

- queryForMap 메소드는 한개혹은 그 이상의 레코드를 가져 올때 List 대신에 자바객체 Map을 반환 합니다.

 

ex)   Map accountMap = sqlMap.queryForMap("", null, "accountId","username")

   // 맵의 Key로 accountId 프로퍼티를 그리고 값으로 계좌의 이름(username)만을 가지는 Map 만드는 겁니다.