この例では、以下のような 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 ジェネレーターを使用してそのインターフェースのインプリメンテーションを生成してから、インプリメンテーション・クラスにあるそれらのメソッドを呼び出すアプリケーションを作成する必要があります。
特定の販売地域に住んでいる顧客用に Customer オブジェクトをイテレーターにキャプチャーする照会の場合、以下のようなインターフェースを定義できます。
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 ジェネレーターを実行してそのインターフェースのインプリメンテーションを生成することができます。 インプリメンテーションの名前は 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
このコードは、以下のステップを実行します。