메모리의 Java 콜렉션을 쿼리하는 인라인 메소드에 대한 리턴 유형

Data 인터페이스에서 메소드를 사용하여 메모리의 콜렉션을 쿼리할 때 해당 메소드는 다음과 같은 유형의 오브젝트를 리턴할 수 있습니다.

두 번째 테이블에서는 콜렉션을 쿼리하는 데 사용할 수 있는 Data 인터페이스의 각 메소드에 대한 리턴 유형에 대해 설명합니다.

표 1. 리턴 유형 테이블에 대한 키
약어 의미
I Iterator
L List
M Map
O Object
S String
T 기본 Java 유형 또는 Bean의 랩퍼 클래스일 수 있는 일반 클래스
표 2. Data 인터페이스의 각 queryXxx() 메소드에 대한 리턴 유형
   
queryXxx() 메소드 L<M<S,O>> L<T> M<S,O> M<S,O>[] <T> <T>[] I<M<S,O>> I<T>
Data.queryArray()       X        
returnClass를 포함한 Data.queryArray()           X    
Data.queryList() X              
returnClass를 포함한 Data.queryList()   X            
Data.queryIterator()             X  
returnClass를 포함한 Data.queryIterator()               X
Data.queryFirst()     X          
returnClass를 포함한 Data.queryFirst()         X      

리턴 유형에 대한 설명

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

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

모든 기본 데이터베이스 ResultSet 오브젝트가 닫힙니다.

<T>

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

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

모든 기본 데이터베이스 ResultSet 오브젝트가 닫힙니다.

<T>[]
T 유형의 배열(예: Employee[], Integer[] 또는 String[])이 리턴되도록 지정합니다. 각 요소는 쿼리 결과의 행에 해당합니다.
모든 쿼리 결과 행은 메소드가 호출되고 모든 기본 데이터베이스 ResultSet 오브젝트가 닫힐 때 구체화됩니다.
Iterator<T>

각 요소가 행에 해당하는 Iterator 오브젝트가 리턴되도록 지정합니다. 매개변수화된 유형 T를 지정해야 합니다.

pureQuery의 Iterator 유형은 ResultIterator입니다. Iterator 사용 완료 후 ResultIterator.close() 메소드를 사용하여 Iterator를 닫아야 합니다.

<T> 오브젝트 리턴에 대한 제한사항

Data 인터페이스의 메소드를 사용할 때 int.class와 같이 <기본 Java 유형>.class 클래스에 속하는 일반 <T> 클래스를 지정하지 마십시오.

SQL에서 쿼리된 정보가 기본 Java 유형으로 저장될 때마다 SQL 널(NULL) 값과 관련된 정보는 유실됩니다. 또한, Java에서는 <기본 Java 유형>.class의 일반 <T> 클래스를 지정하는 일반 메소드가 해당 기본 Java 유형에 적절한 랩퍼 클래스의 인스턴스를 리턴해야 합니다.

예를 들어, Java는 다음과 같은 메소드 호출을 허용하지 않습니다.
int tCount = data.queryFirst("select ...", int.class, p);
이는 queryFirst() 메소드의 정의가 다음과 같기 때문입니다.
<T> T data.queryFirst(String sql, Class<T> returnType, Object... params);
tCount의 선언된 클래스는 Integer여야 합니다.
Integer tCount = data.queryFirst("select ...", Integer.class, p);

피드백