queryArray(), queryIterator() 및 queryList() 메소드의 오버로드 패턴이 거의 동일하므로 다음 예제는 queryIterator() 메소드만 기본으로 합니다. 그러나 queryArray() 및 queryList() 메소드와 다르게 queryIterator() 메소드는 한번에 하나의 행을 페치하고 쿼리 결과를 구체화하지 않습니다. Array 및 List 오브젝트는 모든 결과 행을 보유하지만, Iterator 오브젝트는 한 번에 하나의 행만 보유합니다.
CREATE TABLE company.Customer( CUSTID INTEGER NOT NULL, NAME VARCHAR(75), ADDRESSL1 VARCHAR(60), CITY VARCHAR(35), REGION INTEGER, PRIMARY KEY(CUSTID))
Connection con = DriverManager.getConnection(...); Data db = DataFactory.getData(con); Iterator<Map<String, Object>> regionSize = db.queryIterator( "SELECT REGION, COUNT(*) AS CUSTOMER_COUNT " + " FROM company.Customer GROUP BY REGION " + " ORDER BY CUSTOMER_COUNT DESC" );
public Customer { public Integer custId; public String name; public String addressL1; public String city; @Column(name="REGION") public Integer storeRegion }
Connection con = DriverManager.getConnection(...); Data db = DataFactory.getData(con); Integer regionOne = ...; Integer regionTwo = ...; Iterator<com.company.Customer> twoRegions = db.queryIterator( "SELECT CUSTID, NAME, ADDRESSL1, CITY, REGION" + " FROM company.Customer WHERE REGION IN (?, ?)" com.company.Customer.class, regionOne, regionTwo );
해당 해시 Map과 Customer 테이블의 모든 컬럼을 사용하여 고객에 대한 com.company.CustomerAddress Bean의 인스턴스를 작성하는 RowHandler(이 예제에서는 표시되지 않음)를 작성할 수 있습니다.
public CustomerAddress { public Integer custId; public String name; public String addressL1; public String city; public String state; public Integer zipCode; }
RowHandler인 com.company.Utils.HandleAddress 클래스가 RowHandler를 구현합니다. RowHandler를 사용하여 Bean의 인스턴스를 작성하기 위해 다음과 같은 코드를 작성할 수 있습니다.
Connection con = DriverManager.getConnection(...); Data db = DataFactory.getData(con); Integer regionOne = ...; Integer regionTwo = ...; RowHandler<com.company.CustomerAddress> addAddress = new com.company.Utils.HandleAddress(); Iterator<com.company.CustomerAddress> twoRegions = db.queryIterator( "SELECT CUSTID, NAME, ADDRESSL1, CITY, REGION" + " FROM company.Customer WHERE REGION IN (?, ?)" addAddress, regionOne, regionTwo );
여러 가지 다른 방법으로 동일한 결과를 작성할 수 있습니다. 예를 들어, 데이터 소스에 CITY 및 REGION을 STATE 및 ZIP에 맵핑하는 테이블이 있을 수 있습니다. 이러한 상황에서는 company.Customer 테이블과 해당 맵핑 테이블 간의 조인으로 쿼리를 작성할 수 있습니다.
예제에서는 필요한 클래스의 오브젝트를 작성하는 데 필요한 모든 정보를 데이터 소스에서 사용할 수 없는 경우에 데이터가 데이터 소스에서 추출된 지점에 RowHandler가 응용프로그램 논리를 제공하여 해당 오브젝트를 작성할 수 있음을 간단히 설명합니다.