메모리의 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 Generator는 메소드에 대한 구현을 생성하도록 인터페이스를 처리합니다.
sql
연관된 메소드가 호출될 때 실행되는 SQL문을 제공합니다. FROM절의 콜렉션을 참조하는 추가된 기능을 제외하고 구문은 SQL92 표준 구문을 따라야 합니다. 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를 처리하고 <ROW> 유형의 오브젝트에 컨텐츠를 리턴합니다.
return-type
메소드의 리턴 유형을 지정합니다.

두 번째 테이블에서는 메모리의 콜렉션을 쿼리하는 어노테이션이 있는 메소드에 대한 가능한 리턴 유형에 대해 설명합니다.

표 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 유형이나 기본 Java 유형의 Array, List 또는 Iterator를 리턴하도록 지정하지 마십시오.

SQL에서 쿼리된 정보가 기본 Java 유형으로 저장될 때마다 SQL 널(NULL) 값과 관련된 정보는 유실됩니다. 또한, Java에서는 <기본 Java 유형>.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의 Iterator 유형은 ResultIterator입니다. Iterator 사용 완료 후 ResultIterator.close() 메소드를 사용하여 Iterator를 닫아야 합니다.

List<T>
T 유형의 List 오브젝트가 리턴되도록 지정합니다. 각 요소는 쿼리 결과의 행에 해당합니다.
Map<String,Object>
Map 오브젝트가 구성되고 리턴되도록 지정합니다. 지정된 SQL문의 리턴 컬럼 레이블이 Map의 키가 됩니다. 컬럼 레이블은 일반 Java 코딩 양식을 더 엄격히 준수하기 위해 소문자로 변환됩니다. 쿼리 결과 행의 해당 컬럼 값은 Map 오브젝트의 값이 됩니다.
<T>

스칼라 또는 Bean이 리턴되도록 지정합니다. 스칼라는 Double 또는 String, Date 또는 Timestamp와 같은 랩퍼일 수 있습니다.

둘 이상의 행이 쿼리의 결과로 규정되는 경우, 첫 번째 행의 값이 리턴됩니다.

<T>[]
T 유형의 배열(예: Employee[], Integer[] 또는 String[])이 리턴되도록 지정합니다. 각 요소는 쿼리 결과의 행에 해당합니다.
method-name
인터페이스 메소드의 이름을 지정합니다.
parameter-type parameter-name

이러한 매개변수는 아래 규칙에 따라 SQL문에 지정된 매개변수 표시문자와 일치합니다. 이러한 매개변수는 스칼라 유형, Bean 클래스 또는 Map 오브젝트일 수 있습니다. SQL이 매개변수 참조에 대해 :name 표기를 사용하는 경우, 첫 번째 매개변수 유형은 Bean 또는 Map이어야 합니다. Bean 또는 Map 오브젝트의 특성 이름은 SQL 문자열의 :name 어컨런스와 일치를 위해 사용됩니다.

pureQuery가 메모리의 콜렉션에 대한 쿼리로 해당 SELECT문을 식별할 수 있도록 Iterator, Array 또는 반복 가능 List인 매개변수가 하나 이상 필요합니다. 메모리의 Java 콜렉션에 대한 쿼리의 FROM절의 매개변수 표시문자에 설명된 구문을 사용하여 SELECT문의 FROM절에서 이 매개변수를 참조하십시오.

SQL이 매개변수 표시문자에 대해 ? 표기를 사용하는 경우, 스칼라 값만 제공할 수 있습니다.

?n 표기를 사용하는 경우, 해당 매개변수는 스칼라 유형이어야 합니다(매개변수가 FROM절에 있는 경우는 제외하며 이 경우 해당 매개변수는 콜렉션 또는 Array 오브젝트여야 함).

?n.name 표기를 사용하는 경우, 해당 매개변수는 Bean 클래스 또는 Map 오브젝트여야 합니다. ?n 및 ?n.name 표기는 단일 쿼리에서는 혼합될 수 있지만 독립형 ? 매개변수 표시문자에 대해서는 혼합될 수 없습니다.


피드백