이 예제에서는 다음과 같은 SALES.CUSTOMER 테이블의 단순 정의를 사용합니다 .
CREATE TABLE SALES.CUSTOMER ( CUSTID BIGINT NOT NULL, NAME VARCHAR(24), ADDRESSL1 VARCHAR(50), CITY VARCHAR(24), REGION BIGINT, PRIMARY KEY(CUSTID))
이 테이블에 해당하는 단순 Bean은 다음과 같을 수 있습니다.
public Customer { public Integer custId; public String name; public String addressL1; public String city; public Integer region; }
어노테이션이 있는 메소드를 사용하여 데이터베이스 오브젝트를 조작하는 경우, 해당 메소드를 정의하는 인터페이스를 정의하고 pureQuery Generator를 사용하여 해당 인터페이스의 구현을 생성한 다음 구현 클래스에 있는 메소드를 호출하는 애플리케이션을 작성해야 합니다.
특정 영업 지역에 있는 고객에 대해 Customer 오브젝트로 Iterator를 채우는 쿼리의 경우, 다음과 같이 인터페이스를 정의할 수 있습니다.
import com.company.Customer; public interface CustomerQuery { @Select(sql= "SELECT * FROM Customer WHERE region=?1") Iterator<Customer> getCustomersInRegion(int r); }
인터페이스는 고객이 있는 지역을 식별하는 단일 int 매개변수를 기반으로 com.company.Customer 오브젝트의 Iterator를 리턴하는 것으로 getCustomersInRegion() 메소드를 정의합니다.
@Select 어노테이션은 CUSTOMER 테이블의 지역 컬럼과 ?1로 표시된 함수의 첫 번째 입력 매개변수 사이의 일관성을 기반으로 함수의 리턴된 Iterator를 채우는 SQL 쿼리를 지정합니다.
인터페이스를 정의한 후, pureQuery Generator를 실행하여 해당 인터페이스의 구현을 생성할 수 있습니다. 구현의 기본 이름은 CustomerQueryImpl입니다. 구현의 패키지는 CustomerQuery 인터페이스를 포함하는 패키지입니다.
CustomerQuery 인터페이스의 구현을 생성한 후, 다음과 같이 애플리케이션에서 해당 구현을 사용할 수 있습니다.
Connection con = DriverManager.getConnection(...); 1 CustomerQuery cqcQuery = DataFactory.getData( CustomerQuery.class, con ); 2 Customer c; int r = 123; Iterator<Customer> customers = 3 cqcQuery.getCustomersInRegion(r); while (customers.hasNext()){ 4 c = customers.next(); System.out.println(c.custId+" "+c.name); } ((ResultIterator) customers).close(); 5
위 코드에서 수행하는 단계는 다음과 같습니다.
SELECT문을 애플리케이션의 소스에 표시하려는 경우, 인라인 프로그래밍 스타일을 사용할 수 있습니다.
애플리케이션에서 Data 인터페이스의 구현에 정의되어 있는 오버로드된 queryIterator() 메소드의 버전을 호출합니다.
애플리케이션에서는 다음과 유사한 결과를 표시합니다.
Connection con = DriverManager.getConnection(...); 1 Data db = DataFactory.getData(con); 2 Customer c; int region = 123; Iterator<Customer> customers = db.queryIterator( 3 "SELECT custId, name FROM Customer WHERE region=?1", Customer.class, region); while (customers.hasNext()){ 4 c = customers.next(); System.out.println(c.custId+" "+c.name); } ((ResultIterator) customers).close(); 5
위 코드에서 수행하는 단계는 다음과 같습니다.