각 콜렉션의 경우, 콜렉션에 의해 포함된 오브젝트는 콜렉션의 컨텐츠를 표시하는 SQL 테이블에서 'this'로 이름 지정된 컬럼의 컨텐츠가 되기 쉽습니다.
pureQuery는 콜렉션의 포함된 오브젝트 클래스를 검사하여 해당 오브젝트에 있는 등록 정보의 이름을 판별합니다. 등록 정보 이름은 SQL 테이블의 컬럼 이름이 되고 등록 정보 값은 SQL 테이블의 해당 행의 값이 됩니다.
예를 들어, Customer라는 List<Customer> 콜렉션과 Customer Bean의 정의를 고려하십시오.
public Customer { public Integer custId; public String name; public String addressl1; public String city; public Integer storeRegion; }
pureQuery는 다음과 같은 가상 SQL 테이블에 콜렉션의 컨텐츠를 표시할 수 있습니다.
THIS | CUSTID | NAME | ADDRESSL1 | CITY | REGION |
---|---|---|---|---|---|
Customer object 0 | 001 | 중요 고객 | 1234 Market Street | San Francisco | 900 |
Customer object 1 | 002 | 다른 중요 고객 | 5678 California Street | San Francisco | 900 |
Customer object 2 | 003 | 또 다른 중요 고객 | 90 North First Street | San Jose | 900 |
Customer 오브젝트의 목록을 쿼리하고 영업 지역에서 다섯 개의 가장 큰 도시에 있는 Customer를 표시하는 해당 오브젝트를 리턴하기 위해 어노테이션이 있는 메소드가 필요하다고 가정하십시오.
다음과 같이 메소드를 작성할 수 있습니다.
@Select(sql="SELECT cr.custId, cr.name, cr.addressl1, " + " cr.city, cr.storeRegion " + " FROM ?1 AS cr, ?2 AS t5 WHERE cr.city = t5.city ") List<Customer> getMailingList(List<Customer> curRegion, CitySize[] topFive);
public class CitySize { public String city; public Integer size; }
Customer 오브젝트는 curRegion 목록에서 읽어오므로 CitySize 배열에 표시된 도시와 동일한 도시가 있는 오브젝트에 대해 선택된 컬럼 값은 Customer 오브젝트의 새 인스턴스를 채우는 데 사용되고 해당하는 새 오브젝트는 getMailingList() 메소드가 리턴하는 목록에 추가됩니다.
또한 다음과 같이 Customer 오브젝트의 모든 컬럼을 선택할 수 있습니다.
@Select(sql="SELECT cr.* " + " FROM ?1 AS cr, ?2 AS t5 WHERE cr.city = t5.city ") List<Customer> getMailingList(List<Customer> curRegion, CitySize[] topFive);
Customer 오브젝트의 인스턴스는 curRegion 목록에서 읽어오므로 CitySize 배열에 표시된 도시와 동일한 도시가 있는 오브젝트에 대해 선택된 모든 컬럼 값("this" 컬럼 포함)은 Customer 오브젝트의 새 인스턴스를 채우는 데 사용되고 해당하는 새 오브젝트는 getMailingList() 메소드가 리턴하는 목록에 추가됩니다.
이 예제에서 Customer 오브젝트는 curRegion 목록에서 읽어오므로 CitySize 배열에 표시된 도시와 동일한 도시가 있는 오브젝트는 getMailingList() 메소드가 리턴하는 목록에 추가됩니다.
@Select(sql="SELECT cr.this FROM ?1 AS cr, ?2 AS t5 " + " WHERE cr.city = t5.city ") List<Customer> getMailingList(List<Customer> curRegion, CitySize[] topFive);
getMailingList() 메소드의 서로 다른 버전 간의 차이는 이 메소드가 List<Map<String,Object>> 오브젝트를 리턴하도록 정의된 경우 더 명확하게 표시될 수 있습니다.
첫 번째 버전에서는 결과적으로 각 Map 오브젝트가 값이 custid, name, addressl1, city 및 storeregion인 문자열 키를 포함하게 됩니다.
두 번째 버전에서는 결과적으로 각 Map 오브젝트가 값이 this, custid, name, addressl1, city 및 storeregion인 문자열 키를 포함하게 됩니다.
세 번째 버전에서는 결과적으로 각 Map 오브젝트가 값이 this인 문자열 키를 포함하게 됩니다.