Class AltibaseCollectionImpl
- All Implemented Interfaces:
AltibaseCollection,FindOperation,AutoCloseable
AltibaseCollection 인터페이스의 기본 JDBC 기반 구현체이다.
이 클래스는 Document API의 모든 데이터 조작(CRUD) 연산에 대한 실제 로직을 담고 있다. 내부적으로 JDBC API를 사용하여 Altibase 데이터베이스와 통신하며, 다음과 같은 핵심 책임을 수행한다:
- SQL 변환 및 실행: 사용자 요청(예:
findByCond)을 적절한 SQL 쿼리로 변환하고 실행한다. - 리소스 관리:
PreparedStatement를 캐싱하여 성능을 최적화하고, 사용이 끝난 리소스를 안전하게 닫는다. - 트랜잭션 관리: 데이터 변경 작업(CUD)을 위한 트랜잭션 경계를 관리하며, Spring 프레임워크와의 트랜잭션 연동을 지원한다.
- 예외 변환: 저수준의
SQLException을 의미 있는 고수준의 Document API 예외로 변환하여 사용자에게 전달한다.
FindOperation 인터페이스도 구현하여 메서드 체이닝을 통한 조회 옵션 설정을 지원한다.-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intJSON 컬럼 타입이 VARCHAR일 경우 허용되는 최대 크기 -
Constructor Summary
ConstructorsConstructorDescriptionAltibaseCollectionImpl(AltibaseDatabaseImpl aDb, CollectionMetaData aMetaInfo) AltibaseCollectionImpl의 새 인스턴스를 생성한다. -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()이 컬렉션 인스턴스와 관련된 모든 리소스를 해제한다.void컬렉션이 내부적으로 캐싱하고 있는 리소스(예: PreparedStatement)를 명시적으로 해제한다.long컬렉션 내의 모든 문서 개수를 반환한다.longcountDocuments(AltibaseDocument aFilter) 조건 필터와 일치하는 문서의 개수를 반환한다.longcountDocumentsByJsonPath(String aJsonPath) JsonPath 표현식과 일치하는 문서의 개수를 반환한다.createDocument(Object aKey, String aJsonContent) 지정된 키(Key)와 JSON 문자열로부터 즉시 삽입 가능한 완전한AltibaseDocument인스턴스를 생성한다.createDocument(String aJsonContent) JSON 문자열로부터 이 컬렉션의 컨텍스트에 맞는 새로운AltibaseDocument인스턴스를 생성한다.deleteMany(AltibaseDocument aFilter) 조건 필터와 일치하는 모든 문서를 삭제한다.지정된 키와 일치하는 문서를 삭제한다.deleteOneByCond(AltibaseDocument aFilter) 조건 필터와 일치하는 첫 번째 문서를 삭제한다.execute()지금까지 설정된 모든 옵션을 적용하여 실제 데이터베이스 조회를 실행한다.find()컬렉션의 모든 문서를 조회하기 위한FindOperation을 시작한다.findByCond(AltibaseDocument aFilter) 조건 필터와 일치하는 문서를 조회하기 위한FindOperation을 시작한다.findByJsonPath(String aJsonPath) JsonPath 표현식과 일치하는 문서를 조회하기 위한FindOperation을 시작한다.지정된 키와 일치하는 단일 문서를 조회한다.현재 설정된 사용자 ID를 반환한다.컬렉션의 키 생성 방식을 반환한다.컬렉션의 메타데이터를 반환한다.getName()컬렉션의 이름을 반환한다.insertMany(List<AltibaseDocument> aDocs) 컬렉션에 여러 문서를 한 번에 삽입한다.insertOne(AltibaseDocument aDoc) 컬렉션에 단일 문서를 삽입한다.limit(int aLimit) 반환될 문서의 최대 개수를 제한한다.replaceOne(Object aKey, AltibaseDocument aDoc) 지정된 키와 일치하는 문서를 주어진 새 문서로 완전히 교체한다.replaceOneByCond(AltibaseDocument aFilter, AltibaseDocument aDoc) 조건 필터와 일치하는 첫 번째 문서를 주어진 새 문서로 완전히 교체한다.voidsetCurrentUserId(String aUserId) 현재 작업을 수행하는 사용자 ID를 설정한다.skip(int aSize) 결과셋에서 지정된 개수만큼의 문서를 건너뛴다.sort(AltibaseDocument aSort) 조회 결과를 정렬할 기준을 지정한다.
-
Field Details
-
MAX_JSON_VARCHAR_LENGTH
public static final int MAX_JSON_VARCHAR_LENGTHJSON 컬럼 타입이 VARCHAR일 경우 허용되는 최대 크기- See Also:
-
-
Constructor Details
-
AltibaseCollectionImpl
AltibaseCollectionImpl의 새 인스턴스를 생성한다.이 생성자는 주로
AltibaseDatabaseImpl내부에서 호출된다.- Parameters:
aDb- 상위AltibaseDatabaseImpl인스턴스aMetaInfo- 이 컬렉션의 스키마 정보가 담긴CollectionMetaData
-
-
Method Details
-
createDocument
JSON 문자열로부터 이 컬렉션의 컨텍스트에 맞는 새로운AltibaseDocument인스턴스를 생성한다.반환된 문서는 이 컬렉션의 메타데이터(키 컬럼명, 타입 등)를 포함하지만, 키 값 자체는 설정되지 않은 상태이다.
KeyGenerationType.CLIENT방식의 컬렉션에서는 이 메서드로 문서 생성 후,AltibaseDocument.setKeyValue(Object)를 호출하여 키를 설정해야 한다.- Specified by:
createDocumentin interfaceAltibaseCollection- Parameters:
aJsonContent- 문서의 콘텐츠를 나타내는 JSON 형식의 문자열- Returns:
- 콘텐츠는 채워져 있으나 키 값은 설정되지 않은 새로운
AltibaseDocument인스턴스
-
createDocument
지정된 키(Key)와 JSON 문자열로부터 즉시 삽입 가능한 완전한AltibaseDocument인스턴스를 생성한다.이 메서드는
KeyGenerationType.CLIENT방식의 컬렉션에 문서를 삽입할 때 가장 편리한 방법이다.- Specified by:
createDocumentin interfaceAltibaseCollection- Parameters:
aKey- 새 문서에 할당할 키 값. 이 값의 타입은 컬렉션 생성 시 정의된 키 타입과 일치해야 한다.aJsonContent- 문서의 콘텐츠를 나타내는 JSON 형식의 문자열- Returns:
- 키와 콘텐츠가 모두 설정된 새로운
AltibaseDocument인스턴스
-
countDocuments
public long countDocuments()컬렉션 내의 모든 문서 개수를 반환한다.- Specified by:
countDocumentsin interfaceAltibaseCollection- Returns:
- 컬렉션의 전체 문서 수
-
countDocuments
조건 필터와 일치하는 문서의 개수를 반환한다.- Specified by:
countDocumentsin interfaceAltibaseCollection- Parameters:
aFilter- 조회 조건을 정의하는AltibaseDocument객체- Returns:
- 조건을 만족하는 문서의 수
-
countDocumentsByJsonPath
JsonPath 표현식과 일치하는 문서의 개수를 반환한다.- Specified by:
countDocumentsByJsonPathin interfaceAltibaseCollection- Parameters:
aJsonPath- JsonPath 표현식 문자열- Returns:
- 조건을 만족하는 문서의 수
-
findByCond
조건 필터와 일치하는 문서를 조회하기 위한FindOperation을 시작한다.- Specified by:
findByCondin interfaceAltibaseCollection- Parameters:
aFilter- 조회 조건을 정의하는AltibaseDocument객체- Returns:
- 조회 연산을 구성하기 위한
FindOperation인스턴스
-
findByJsonPath
JsonPath 표현식과 일치하는 문서를 조회하기 위한FindOperation을 시작한다.- Specified by:
findByJsonPathin interfaceAltibaseCollection- Parameters:
aJsonPath- Jayway JsonPath 표준을 따르는 JsonPath 표현식 문자열- Returns:
- 조회 연산을 구성하기 위한
FindOperation인스턴스
-
find
컬렉션의 모든 문서를 조회하기 위한FindOperation을 시작한다.- Specified by:
findin interfaceAltibaseCollection- Returns:
- 조회 연산을 구성하기 위한
FindOperation인스턴스
-
findOne
지정된 키와 일치하는 단일 문서를 조회한다.- Specified by:
findOnein interfaceAltibaseCollection- Parameters:
aKey- 조회할 문서의 기본 키 값- Returns:
- 조회된
AltibaseDocument객체. 문서가 존재하지 않을 경우null을 반환한다.
-
execute
지금까지 설정된 모든 옵션을 적용하여 실제 데이터베이스 조회를 실행한다.이 메서드는 연쇄적인 옵션 설정의 마지막에 호출되는 최종(terminal) 연산이다. 반환된
DocResult는 데이터베이스 리소스를 포함하므로, 반드시try-with-resources구문을 사용하여 자동으로 닫히도록 해야 한다.- Specified by:
executein interfaceFindOperation- Returns:
- 조회 결과를 순회할 수 있는
DocResult인스턴스
-
insertOne
컬렉션에 단일 문서를 삽입한다.- Specified by:
insertOnein interfaceAltibaseCollection- Parameters:
aDoc- 삽입할AltibaseDocument객체- Returns:
- 삽입 작업의 결과를 담은
InsertResult
-
insertMany
컬렉션에 여러 문서를 한 번에 삽입한다.내부적으로 JDBC 배치(batch) 처리를 사용하므로, 여러 개의
insertOne을 호출하는 것보다 효율적이다.- Specified by:
insertManyin interfaceAltibaseCollection- Parameters:
aDocs- 삽입할AltibaseDocument객체의 리스트- Returns:
- 각 문서에 대한 삽입 결과를 담은
InsertResult의 리스트
-
replaceOne
지정된 키와 일치하는 문서를 주어진 새 문서로 완전히 교체한다.- Specified by:
replaceOnein interfaceAltibaseCollection- Parameters:
aKey- 교체 대상 문서의 기본 키 값aDoc- 교체할 새로운AltibaseDocument객체- Returns:
- 갱신 작업의 결과를 담은
UpdateResult
-
replaceOneByCond
조건 필터와 일치하는 첫 번째 문서를 주어진 새 문서로 완전히 교체한다.- Specified by:
replaceOneByCondin interfaceAltibaseCollection- Parameters:
aFilter- 교체 대상 문서를 찾기 위한AltibaseDocument조건식aDoc- 교체할 새로운AltibaseDocument객체- Returns:
- 갱신 작업의 결과를 담은
UpdateResult
-
deleteOne
지정된 키와 일치하는 문서를 삭제한다.- Specified by:
deleteOnein interfaceAltibaseCollection- Parameters:
aKey- 삭제할 문서의 기본 키 값- Returns:
- 삭제 작업의 결과를 담은
UpdateResult
-
deleteOneByCond
조건 필터와 일치하는 첫 번째 문서를 삭제한다.- Specified by:
deleteOneByCondin interfaceAltibaseCollection- Parameters:
aFilter- 삭제할 문서를 찾기 위한AltibaseDocument조건식- Returns:
- 삭제 작업의 결과를 담은
UpdateResult
-
deleteMany
조건 필터와 일치하는 모든 문서를 삭제한다.- Specified by:
deleteManyin interfaceAltibaseCollection- Parameters:
aFilter- 삭제할 문서를 찾기 위한AltibaseDocument조건식- Returns:
- 삭제 작업의 결과를 담은
UpdateResult
-
skip
결과셋에서 지정된 개수만큼의 문서를 건너뛴다.주로 페이징(pagination) 구현 시
FindOperation.limit(int)과 함께 사용된다.- Specified by:
skipin interfaceFindOperation- Parameters:
aSize- 건너뛸 문서의 개수. 0 또는 양수여야 한다.- Returns:
- 추가적인 옵션 설정을 위해 자기 자신(
this)을 반환한다.
-
limit
반환될 문서의 최대 개수를 제한한다.- Specified by:
limitin interfaceFindOperation- Parameters:
aLimit- 반환할 문서의 최대 개수. 1 이상의 값이어야 한다.- Returns:
- 추가적인 옵션 설정을 위해 자기 자신(
this)을 반환한다.
-
sort
조회 결과를 정렬할 기준을 지정한다.정렬 기준은 필드 이름을 키(key)로, 정렬 방향을 값(value)으로 가지는
AltibaseDocument로 전달한다. 정렬 방향은 오름차순일 경우1또는"ASC"를, 내림차순일 경우-1또는"DESC"를 사용한다.// 예시 1: 'name' 필드 기준 오름차순 정렬 .sort(AltibaseDocument.parse("{\"name\": 1}")) // 예시 2: 'age' 필드 기준 내림차순, 'name' 필드 기준 오름차순 정렬 .sort(AltibaseDocument.parse("{\"age\": -1, \"name\": 1}"))- Specified by:
sortin interfaceFindOperation- Parameters:
aSort- 정렬 기준을 정의하는AltibaseDocument객체- Returns:
- 추가적인 옵션 설정을 위해 자기 자신(
this)을 반환한다.
-
getName
컬렉션의 이름을 반환한다.- Specified by:
getNamein interfaceAltibaseCollection- Returns:
- 컬렉션 이름
-
getGenerationType
컬렉션의 키 생성 방식을 반환한다.- Specified by:
getGenerationTypein interfaceAltibaseCollection- Returns:
KeyGenerationType(UUID 또는 CLIENT)
-
getMetadata
컬렉션의 메타데이터를 반환한다.- Specified by:
getMetadatain interfaceAltibaseCollection- Returns:
CollectionMetaData객체
-
close
public void close()이 컬렉션 인스턴스와 관련된 모든 리소스를 해제한다.try-with-resources구문에 의해 자동으로 호출된다.- Specified by:
closein interfaceAltibaseCollection- Specified by:
closein interfaceAutoCloseable
-
closeResources
public void closeResources()컬렉션이 내부적으로 캐싱하고 있는 리소스(예: PreparedStatement)를 명시적으로 해제한다. 일반적으로AltibaseCollection.close()에 의해 호출된다.- Specified by:
closeResourcesin interfaceAltibaseCollection
-
setCurrentUserId
현재 작업을 수행하는 사용자 ID를 설정한다.설정된 사용자 ID는 문서 삽입 시
CREATED_BY컬럼에, 문서 수정 시LAST_MODIFIED_BY컬럼에 기록된다. 이 메서드를 호출하지 않으면 감사 컬럼은 null로 저장된다.- Specified by:
setCurrentUserIdin interfaceAltibaseCollection- Parameters:
aUserId- 현재 사용자 ID (null 허용)
-
getCurrentUserId
현재 설정된 사용자 ID를 반환한다.- Specified by:
getCurrentUserIdin interfaceAltibaseCollection- Returns:
- 현재 사용자 ID (설정되지 않은 경우 null)
-