メモリー内の Java コレクションに対する照会でのアノテーション付きメソッドの構文

アノテーション付きメソッドを使用してメモリー内のコレクションを照会する場合、こうしたメソッドの定義は以下の構文に準拠していなければなりません。
構文図を読む構文図をスキップする
>>-@Select--(--sql--=--"--SQL-statement--"--)------------------->

>--+--------------------------------------------------------------------------------------+-->
   '-@Handler--(--+-parameterHandler--=--class-name----------------------------------+--)-'   
                  +-resultHandler--=--class-name-------------------------------------+        
                  +-resultHandler--=--class-name--,--parameterHandler--=--class-name-+        
                  +-rowHandler--=--class-name----------------------------------------+        
                  '-rowHandler--=--class-name--,--parameterHandler--=--class-name----'        

>--modifiers--return-type--method-name--(--+------------------------------------+--);-><
                                           | .-,------------------------------. |       
                                           | V                                | |       
                                           '---parameter-type--parameter-name-+-'       

構文図で使用されている規則については、構文図の読み方を参照してください。

構文図を読む構文図をスキップする
return-type:

>>-+-Iterator<T>--------+--------------------------------------><
   +-List<T>------------+   
   +-Map<String,Object>-+   
   +-T------------------+   
   '-T[]----------------'   

@Select
メソッドが SQL SELECT ステートメントを実行することを指定します。この Java アノテーションは、対応するメソッドが pureQuery メソッドであることをシグナル通知します。pureQuery ジェネレーターは、インターフェースを処理してメソッドのインプリメンテーションを生成します。
sql
関連したメソッドが呼び出されたときに実行する SQL ステートメントを提供します。 構文は SQL92 標準構文に準拠していなければなりません。ただし、FROM 節でコレクションを参照する追加機能は例外です。pureQuery はいくつかのパラメーター・マーカーも定義しています。これらのマーカーは、インライン・メソッドまたはアノテーション付きメソッドの入力パラメーターに対応します。
@Handler
アノテーション付きメソッドの実行時に、pureQuery のデフォルトのプロシージャーではなく、指定されたインプリメンテーション・クラスを指定するように、pureQuery に指示します。
parameterHandler
com.ibm.pdq.handlers.ParameterHandler インターフェースのインプリメンテーションを指定します。この属性を指定した場合、pureQuery は、クラスを使用して、SQL ステートメント用の java.sql.PreparedStatement に対するパラメーター値を設定します。
resultHandler
com.ibm.pdq.handlers.ResultHandler<RES> インターフェースのインプリメンテーションを指定します。この属性を指定した場合、pureQuery は、クラスを使用して、アノテーション付きメソッドから戻されるオブジェクトを作成します。クラスの handle() メソッドは、SQL ステートメント用の java.sql.ResultSet を処理し、<RES> 型のオブジェクトとして内容を戻します。
rowHandler
com.ibm.pdq.handlers.RowHandler<ROW> インターフェースのインプリメンテーションを指定します。この属性を指定した場合、pureQuery は、クラスを使用して、アノテーション付きメソッドから戻される照会結果の各行を示すオブジェクトを作成します。このクラスの handle() メソッドは、SQL ステートメント用の java.sql.ResultSet からの 1 つの行を処理し、<ROW> 型のオブジェクトとして内容を戻します。
return-type
メソッドの戻りの型を指定します。

2 番目の表には、メモリー内のコレクションを照会するアノテーション付きメソッドで可能な戻りの型が示されています。

表 1. 戻りの型に関する表のキー
省略形 意味
I Iterator
L List
M Map
O Object
S String
T 汎用クラス。これは、プリミティブ Java タイプのラッパー・クラス、または Bean になる可能性があります。
表 2. アノテーションの型に応じた戻りの型
  I<M<S,O>> I<T> L<M<S,O>> L<T> M<S,O> M<S,O>[] <T>
@Select X X X X X X X

アノテーション付きメソッドを使用する場合は、@Select がプリミティブ Java タイプ、つまり ArrayList、または Iterator を戻すことを指定しないでください。

SQL NULL 値に関する情報は、SQL から照会された情報がプリミティブ Java タイプに格納されると失われます。 さらに、Java は、<primitive Java type>.class の汎用 <T> クラスを指定する汎用メソッドが、そのプリミティブ Java タイプに適したラッパー・クラスのインスタンスを戻すように要求します。

例えば、Java は以下のようなメソッドの起動を許可しません。
int tCount = myGenericMethod( int.class );
ここで、以下は myGenericMethod の定義です。
<T> T myGenericMethod( Class<T> cl );
tCount の宣言されたクラスは Integer でなければなりません。
Integer tCount = myQuery.myGenericMethod( Integer.class );
Iterator<T>

Iterator オブジェクトが、行に対応する各エレメントとともに戻されることを指定します。 パラメーター化されたタイプ T を指定する必要があります。

pureQuery における反復子のタイプは ResultIterator です。使用し終えたら、ResultIterator.close() メソッドでそれらの反復子を閉じる必要があります。

List<T>
タイプ TList オブジェクトが戻されることを指定します。 各エレメントは、照会結果の行に対応します。
Map<String,Object>
Map オブジェクトが構成されて戻されることを指定します。 指定された SQL ステートメントの戻り列ラベルはマップのキーになります。 一般的な Java コーディング・スタイルへの準拠性を高めるために、列ラベルは小文字に変換されます。 照会結果の行からの対応する列値は、Map オブジェクトの値になります。
<T>

スカラーまたは Bean が戻されることを指定します。スカラーは、Double などのラッパー、または StringDateTimestamp にすることができます。

複数の行が該当する場合には、照会の結果として最初の行の値が戻されます。

<T>[]
Employee[]Integer[]、または String[] などの、タイプ T の配列が戻されることを指定します。各エレメントは、照会結果の行に対応します。
method-name
インターフェース・メソッドの名前を指定します。
parameter-type parameter-name

こうしたパラメーターは、以下の規則に従って、SQL ステートメントで指定されるパラメーター・マーカーと突き合わされます。こうしたパラメーターは、スカラー型、Bean クラス、または Map オブジェクトが可能です。SQL のパラメーター参照に :name 表記が使用されている場合には、最初の parameter-type は Bean または Map でなければなりません。 Bean または Map オブジェクトのプロパティー名が、SQL ストリング内での :name の出現箇所との突き合わせに使用されます。

pureQuery がメモリー内のコレクションに対する照会として、対応する SELECT ステートメントを識別できるようにするには、Iterator、Array、または反復可能な List であるパラメーターが少なくとも 1 つは必要とされます。メモリー内 Java コレクションの照会の FROM 節にあるパラメーター・マーカーで説明されている構文を使用して、SELECT ステートメントの FROM 節でこのパラメーターを参照します。

SQL で ? 表記がパラメーター・マーカーに使用されている場合には、スカラー値だけを指定できます。

?n 表記を使用する場合、対応するパラメーターはスカラー型でなければなりません (ただし、FROM 節にある場合は除きます。その場合には、コレクションまたは Array オブジェクトにする必要があります)。

?n.name 表記を使用する場合には、対応するパラメーターは Bean クラスか Map オブジェクトでなければなりません。?n および ?n.name 表記を 1 つの照会で混用できますが、独立した ? パラメーター・マーカーと混用することはできません。


フィードバック