この例では、以下のような 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
このコードは、以下のステップを実行します。