본문 바로가기

Programming/iBatis

QueryForObject, List, Map

queryForObject() 메서드

데이터베이스로 부터 한 개의 레코드를 가져다가 자바 객체에 저장 한다.

public Object queryForObject(String id) throws SQLException;
public Object queryForObject(String id, Object parameter) throws SQLException;

디폴트 생성자를 가진 객체를 생성(보편적 방법)

디폴트 생성자가 없으면 throws "런타임 예외"

public Object queryForObject(String id, Object parameter, Object result) throws SQLException;

반환하는 값으로 사용될 객체를 받음
결과값 -> 파라미터의 형태로 객체에 지정
생성자가 protected / 디폴트 생성자가 없어서 객체를 쉽게 생성할 수 없을 때 유용

[파라미터]

id : 실행할 매핑 구문의 이름

parameter : 값을 제공하는 데 사용할 파라미터 객체

result : 리턴 객체

[주의점]

1. 리턴값을 받는 객체에 디폴트 생성자가 없다면, 런타임 예외를 발생시킨다.

2. 두번째 시그니처에서는 3번째 파라미터가 리턴값을 대신한다. 리턴값을 받는 객체에 디폴트 생성자가 없거나, 혹은 protected 인 경우에 3번째 파라미터로 전달해서 리턴값을 가져올 수 있다.

3. 1개이상의 레코드를 반환하면 예외를 던진다. 역할에서 밝힌바대로 1개의 레코드만을 가져와야 한다.

[사용 예]

Board board = (Board)sqlMap.queryForObject("Board.getBoard", "3");

// 첫번째 인자인 id 값에 들어간 "Board.getBoard"에서 앞에 들어간 Board는 앞서 '3번 SQL정의 파일'에서 설정한 네임스페이스 명이며 getBoard는 결과 값을 주는 해당 sql의 id값 이다.

두번째 인자인 Object parameter값에 들어간 "3"은 앞서 '3번 SQL정의 파일'에서 설정한 sql의 #xxx#파라미터 값에 들어갈 값이다. 이는 위에서 String타입으로 넣으라고 설정해주었기 때문에 String타입으로 "3"을 넣었다.

queryForObject()함수에 인자값이 하나만 들어가는 경우는 id값만 들어가는 경우로 이는 SQL문의 where절이 없을 때 사용한다.

또한 queryForObject(String id, Object parameter, Object result)와 같이 인자값을 세개로 사용하는 경우가 있는데, 이는 여기에 써준 타입으로 결과값을 받아주라고 미리 설정해 주는것 이다.

 

queryForList() 메소드

한 개 이상의 레코드를 가져와서 자바 객체의 List를 만드는 데 사용한다.

public List queryForList(String id) throws SQLException;
public List queryForList(String id, Object parameter) throws SQLException;

매핑 구문이 반환하는 모든 객체를 반환

public List queryForList(String id, Object parameter, int skip, int max) throws SQLException;

 

전체 결과의 일부만을 반환 ( 전체 결과에서 skip만큼 건너 뛴 후 max의 개수의 레코드만 반환)

[파라미터]

id : 실행할 매핑 구문의 이름

parameter : 값을 제공하는 데 사용할 파라미터 객체

skip : 지정된 개수만큼 건너뜀

max : 지정된 개수의 레코드만 반환

[사용 예]

<select id="getBoardList" parameterClass="string" resultClass="hashmap">
   select * from board where name = #name#
</select>

List list = sqlMap.queryForList("Board.getBoardList", "hong");

// SqlMapClient 이 제공 해주는 queryForList함수는 SQL의 결과값이 2개 이상일 때 이를 받아와 자바 객체의 List를 만드는 데 사용하는 메소드로 각각의 결과값을 list에 넣어서 list타입으로 반환해준다.

앞서 '3번 SQL정의 파일'에서 <select id="getBoardList" parameterClass="string" resultClass="hashmap">

resultClass="hashmap"으로 설정해 주었기 때문에 2개의 결과 값은 각각 hashmap타입으로 나오며 이것이 list에 들어가는 것이다

 

queryForMap() 메소드

데이터베이스로부터 한 개 혹은 그 이상의 레코드를 가져올 때 자바 객체의 Map을 반환

Map queryForMap(String id, Object parameter, String key) throws SQLException;

퀴리 실행 후 Map 객체를 생성하여 반환

Map queryForMap(String id, Object parameter, String key, String value) throws SQLException;

결과값 객체 -> value 파라미터에 지정된 프로퍼티 값이 됨

[파라미터]

key : 결과 객체를 가리키는 키, 지정된 프로퍼티의 값

[사용 예]

Map accountMap = sqlMap.queryForMap("Account.getAll", null, "accountId");

accountMap = sqlMap.queryForMap("Account.getAll", null, "accountId", "username");

 

참조 : http://blog.naver.com/PostView.nhn?blogId=saladin83&logNo=10102082504

http://pelican7.egloos.com/2579625, http://ssami.tistory.com/250

'Programming > iBatis' 카테고리의 다른 글

iBatis - selectKey (자동생성키)  (0) 2012.12.27
iBatis - Iterate  (1) 2012.11.16
QueryForList와 QueryForMap의 차이 예  (0) 2012.04.09
iBatis - 동적쿼리  (0) 2012.04.06
Mapped Statements  (0) 2012.04.06