뭐.. 이거 가끔 헷갈리기도 하죠.
흠..
일반적으로 대부분 사람들은 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 로 가져왔다면 루핑과 분기문를 써야겠죠.
실제 프로젝트 상에서는 코드테이블을 가져올때 유용합니다.
그룹코드에 해당하는 코드내용들을 조회하여 그 일부 코드를 사용하거나 혹은 전체 코드를 사용할
경우 매우 유용하죠.