302. 셀렉트 (SELECT)

2012. 4. 25. 10:21공부/MYBATIS

조회구문은 마이바티스 사용 시에 정말 많이 사용하게될 요소 중 하나야. 데이터베이스 안에 넣어둔 데이터는 꺼내기 전까지 징하게 가치있는 건 아니야. 그래서 대부분의 어플리케이션은 데이터를 수정하는 것보다 조회를 더 많이 하지. 모든 삽입, 수정, 삭제시에도 아마 많은 조회가 있을겨. 이점이 마이바티스의 하나의 원칙이고, 결과 매핑과 조회에 좀 더 집중하고 매진하는 이유야. 조회 구문은 간단한 경우 매우 간단해. 예를 들면

<select id="selectPerson" parameterType="int" resultType="hashmap">
  SELECT * FROM PERSON WHERE ID = #{id}
</select>

이 구문은 selectPerson이라 불리고 int (혹은 integer) 형 파라미터를 가지지, 그리고 행 값에 컬럼이름으로 키가 주어진 해시맵을 리턴해.

파라미터 표기법을 보자

#{id}

이것은 마이바티스가 PerparedStatement 파라미터를 생성해야 함을 말해주고 있어. JDBC와 함꼐 사용할 때 그런 파라미터들은 SQL 안에서 "?"로 구분되어지고 PerparedStatement로 전달돼. 아래처럼

// Similar JDBC code, NOT MyBatis…
String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps.setInt(1,id);

물론, JDBC 단독으로 사용시에는 결과를 해석하고 객체의 인스턴스에 매핑하는 더 많은 코드를 필요로 해. 그리고 이것이 마이바티스가 그렇게 많은 코드를 생성해야하는 것으로부터 널 구해주는 거지. 파라미터와 결과 매핑에 대해 알아야할 더 많은 것들이 있어. 이 장의 나머지 각각의 부분에서 그 세부사항을 보증할겨

조회 구문은 각각의 구문들이 어떻게 작동하는지에 대한 세부사항을 설정하는 더 많은 속성들이 있어.

<select
  id="selectPerson"
  parameterType="int"
  parameterMap="deprecated"
  resultType="hashmap"
  resultMap="personResultMap"
  flushCache="false"
  useCache="true"
  timeout="10000"
  fetchSize="256"
  statementType="PREPARED"
  resultSetType="FORWARD_ONLY">

조회 속성

속성

설명
id

구문을 참조하기 위해 사용될 수 있는 이 네임스페이스의 유일한 구분자 

parameterType이 구문으로 전달될 파라미터를 위한 전제 클래스 이름이나 별명
parameterMapThis is a deprecated approach to referencing an external parameterMap. Use inline parameter mappings and the parameterType attribute.
resultType

이 구문으로부터 리턴이 기대되는 타입의 전체 클래스 이름이나 별명. 컬렉션의 경우, 컬렉션 그 자체가 아닌, 컬렉션을 포함한 타입이어야 한다. resultType 이나 resultMap 사용, not both.

resultMap

외부  resultMap  에 대한 참조 이름. 결과 집합은 마이바티스의 가장 강력한 특징이고, 이에 대한 이해가 깊으면, 많은 어려운 매핑 케이스를 풀어낼 수 있음. resultType 이나 resultMap 사용, not both.

flushCache

true로 세팅할 경우, 이 구문이 호출될 때마다 로컬 및 2단계 레벨 캐시가 지워질것이다(flushed). 기본값 : select 구문에 대해 false 

useCache

true로 설정하면, 이 구문의 결과가 2단계 캐시로 캐싱될것이다. 기본값 : select 구문에 대해 true  

timeout

이것은 예외를 던지기 전에 드라이버가 데이터베이스에 대한 요청으로부터 리턴을 기다리는 시간을 설정. 기본값은 unset (드라이버에 의존).

fetchSize

드라이버가 배치에서 이 세팅과 동일한 크기의  결과를 리턴하도록 하는 행 넘버링 드라이버 힌트. 기본값은unset(드라이버에 의존).

statementTypeSTATEMENTPREPARED 혹은 CALLABLE  중 하나. 마이바티스가 각기 StatementPreparedStatement 나 CallableStatement 사용하도록 함. 기본값: PREPARED.
resultSetTypeFORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE 중 하나  . 기본값은 unset (드라이버에 의존).
databaseId

설정된 데이터베이스공급자가 있는 경우, 마이바티스는  databaseId 속성이 없는 구문이나 현재의 databaseId  와 일치하는 모든 구문을 로드할 것이다. databaseId 있고 없는 동일한 구문이 발견될 경우 databaseId 가 없는 놈은 버려진다.