Class AltibaseCollectionImpl

java.lang.Object
com.altibase.document.impl.AltibaseCollectionImpl
All Implemented Interfaces:
AltibaseCollection, FindOperation, AutoCloseable

public class AltibaseCollectionImpl extends Object implements AltibaseCollection, FindOperation
AltibaseCollection 인터페이스의 기본 JDBC 기반 구현체이다.

이 클래스는 Document API의 모든 데이터 조작(CRUD) 연산에 대한 실제 로직을 담고 있다. 내부적으로 JDBC API를 사용하여 Altibase 데이터베이스와 통신하며, 다음과 같은 핵심 책임을 수행한다:

  • SQL 변환 및 실행: 사용자 요청(예: findByCond)을 적절한 SQL 쿼리로 변환하고 실행한다.
  • 리소스 관리: PreparedStatement를 캐싱하여 성능을 최적화하고, 사용이 끝난 리소스를 안전하게 닫는다.
  • 트랜잭션 관리: 데이터 변경 작업(CUD)을 위한 트랜잭션 경계를 관리하며, Spring 프레임워크와의 트랜잭션 연동을 지원한다.
  • 예외 변환: 저수준의 SQLException을 의미 있는 고수준의 Document API 예외로 변환하여 사용자에게 전달한다.
이 클래스는 FindOperation 인터페이스도 구현하여 메서드 체이닝을 통한 조회 옵션 설정을 지원한다.
See Also:
  • Field Details

    • MAX_JSON_VARCHAR_LENGTH

      public static final int MAX_JSON_VARCHAR_LENGTH
      JSON 컬럼 타입이 VARCHAR일 경우 허용되는 최대 크기
      See Also:
  • Constructor Details

  • Method Details

    • createDocument

      public AltibaseDocument createDocument(String aJsonContent)
      JSON 문자열로부터 이 컬렉션의 컨텍스트에 맞는 새로운 AltibaseDocument 인스턴스를 생성한다.

      반환된 문서는 이 컬렉션의 메타데이터(키 컬럼명, 타입 등)를 포함하지만, 키 값 자체는 설정되지 않은 상태이다. KeyGenerationType.CLIENT 방식의 컬렉션에서는 이 메서드로 문서 생성 후, AltibaseDocument.setKeyValue(Object)를 호출하여 키를 설정해야 한다.

      Specified by:
      createDocument in interface AltibaseCollection
      Parameters:
      aJsonContent - 문서의 콘텐츠를 나타내는 JSON 형식의 문자열
      Returns:
      콘텐츠는 채워져 있으나 키 값은 설정되지 않은 새로운 AltibaseDocument 인스턴스
    • createDocument

      public AltibaseDocument createDocument(Object aKey, String aJsonContent)
      지정된 키(Key)와 JSON 문자열로부터 즉시 삽입 가능한 완전한 AltibaseDocument 인스턴스를 생성한다.

      이 메서드는 KeyGenerationType.CLIENT 방식의 컬렉션에 문서를 삽입할 때 가장 편리한 방법이다.

      Specified by:
      createDocument in interface AltibaseCollection
      Parameters:
      aKey - 새 문서에 할당할 키 값. 이 값의 타입은 컬렉션 생성 시 정의된 키 타입과 일치해야 한다.
      aJsonContent - 문서의 콘텐츠를 나타내는 JSON 형식의 문자열
      Returns:
      키와 콘텐츠가 모두 설정된 새로운 AltibaseDocument 인스턴스
    • countDocuments

      public long countDocuments()
      컬렉션 내의 모든 문서 개수를 반환한다.
      Specified by:
      countDocuments in interface AltibaseCollection
      Returns:
      컬렉션의 전체 문서 수
    • countDocuments

      public long countDocuments(AltibaseDocument aFilter)
      조건 필터와 일치하는 문서의 개수를 반환한다.
      Specified by:
      countDocuments in interface AltibaseCollection
      Parameters:
      aFilter - 조회 조건을 정의하는 AltibaseDocument 객체
      Returns:
      조건을 만족하는 문서의 수
    • countDocumentsByJsonPath

      public long countDocumentsByJsonPath(String aJsonPath)
      JsonPath 표현식과 일치하는 문서의 개수를 반환한다.
      Specified by:
      countDocumentsByJsonPath in interface AltibaseCollection
      Parameters:
      aJsonPath - JsonPath 표현식 문자열
      Returns:
      조건을 만족하는 문서의 수
    • findByCond

      public FindOperation findByCond(AltibaseDocument aFilter)
      조건 필터와 일치하는 문서를 조회하기 위한 FindOperation을 시작한다.
      Specified by:
      findByCond in interface AltibaseCollection
      Parameters:
      aFilter - 조회 조건을 정의하는 AltibaseDocument 객체
      Returns:
      조회 연산을 구성하기 위한 FindOperation 인스턴스
    • findByJsonPath

      public FindOperation findByJsonPath(String aJsonPath)
      JsonPath 표현식과 일치하는 문서를 조회하기 위한 FindOperation을 시작한다.
      Specified by:
      findByJsonPath in interface AltibaseCollection
      Parameters:
      aJsonPath - Jayway JsonPath 표준을 따르는 JsonPath 표현식 문자열
      Returns:
      조회 연산을 구성하기 위한 FindOperation 인스턴스
    • find

      public FindOperation find()
      컬렉션의 모든 문서를 조회하기 위한 FindOperation을 시작한다.
      Specified by:
      find in interface AltibaseCollection
      Returns:
      조회 연산을 구성하기 위한 FindOperation 인스턴스
    • findOne

      public AltibaseDocument findOne(Object aKey)
      지정된 키와 일치하는 단일 문서를 조회한다.
      Specified by:
      findOne in interface AltibaseCollection
      Parameters:
      aKey - 조회할 문서의 기본 키 값
      Returns:
      조회된 AltibaseDocument 객체. 문서가 존재하지 않을 경우 null을 반환한다.
    • execute

      public DocResult execute()
      지금까지 설정된 모든 옵션을 적용하여 실제 데이터베이스 조회를 실행한다.

      이 메서드는 연쇄적인 옵션 설정의 마지막에 호출되는 최종(terminal) 연산이다. 반환된 DocResult는 데이터베이스 리소스를 포함하므로, 반드시 try-with-resources 구문을 사용하여 자동으로 닫히도록 해야 한다.

      Specified by:
      execute in interface FindOperation
      Returns:
      조회 결과를 순회할 수 있는 DocResult 인스턴스
    • insertOne

      public InsertResult insertOne(AltibaseDocument aDoc)
      컬렉션에 단일 문서를 삽입한다.
      Specified by:
      insertOne in interface AltibaseCollection
      Parameters:
      aDoc - 삽입할 AltibaseDocument 객체
      Returns:
      삽입 작업의 결과를 담은 InsertResult
    • insertMany

      public List<InsertResult> insertMany(List<AltibaseDocument> aDocs)
      컬렉션에 여러 문서를 한 번에 삽입한다.

      내부적으로 JDBC 배치(batch) 처리를 사용하므로, 여러 개의 insertOne을 호출하는 것보다 효율적이다.

      Specified by:
      insertMany in interface AltibaseCollection
      Parameters:
      aDocs - 삽입할 AltibaseDocument 객체의 리스트
      Returns:
      각 문서에 대한 삽입 결과를 담은 InsertResult의 리스트
    • replaceOne

      public UpdateResult replaceOne(Object aKey, AltibaseDocument aDoc)
      지정된 키와 일치하는 문서를 주어진 새 문서로 완전히 교체한다.
      Specified by:
      replaceOne in interface AltibaseCollection
      Parameters:
      aKey - 교체 대상 문서의 기본 키 값
      aDoc - 교체할 새로운 AltibaseDocument 객체
      Returns:
      갱신 작업의 결과를 담은 UpdateResult
    • replaceOneByCond

      public UpdateResult replaceOneByCond(AltibaseDocument aFilter, AltibaseDocument aDoc)
      조건 필터와 일치하는 첫 번째 문서를 주어진 새 문서로 완전히 교체한다.
      Specified by:
      replaceOneByCond in interface AltibaseCollection
      Parameters:
      aFilter - 교체 대상 문서를 찾기 위한 AltibaseDocument 조건식
      aDoc - 교체할 새로운 AltibaseDocument 객체
      Returns:
      갱신 작업의 결과를 담은 UpdateResult
    • deleteOne

      public UpdateResult deleteOne(Object aKey)
      지정된 키와 일치하는 문서를 삭제한다.
      Specified by:
      deleteOne in interface AltibaseCollection
      Parameters:
      aKey - 삭제할 문서의 기본 키 값
      Returns:
      삭제 작업의 결과를 담은 UpdateResult
    • deleteOneByCond

      public UpdateResult deleteOneByCond(AltibaseDocument aFilter)
      조건 필터와 일치하는 첫 번째 문서를 삭제한다.
      Specified by:
      deleteOneByCond in interface AltibaseCollection
      Parameters:
      aFilter - 삭제할 문서를 찾기 위한 AltibaseDocument 조건식
      Returns:
      삭제 작업의 결과를 담은 UpdateResult
    • deleteMany

      public UpdateResult deleteMany(AltibaseDocument aFilter)
      조건 필터와 일치하는 모든 문서를 삭제한다.
      Specified by:
      deleteMany in interface AltibaseCollection
      Parameters:
      aFilter - 삭제할 문서를 찾기 위한 AltibaseDocument 조건식
      Returns:
      삭제 작업의 결과를 담은 UpdateResult
    • skip

      public FindOperation skip(int aSize)
      결과셋에서 지정된 개수만큼의 문서를 건너뛴다.

      주로 페이징(pagination) 구현 시 FindOperation.limit(int)과 함께 사용된다.

      Specified by:
      skip in interface FindOperation
      Parameters:
      aSize - 건너뛸 문서의 개수. 0 또는 양수여야 한다.
      Returns:
      추가적인 옵션 설정을 위해 자기 자신(this)을 반환한다.
    • limit

      public FindOperation limit(int aLimit)
      반환될 문서의 최대 개수를 제한한다.
      Specified by:
      limit in interface FindOperation
      Parameters:
      aLimit - 반환할 문서의 최대 개수. 1 이상의 값이어야 한다.
      Returns:
      추가적인 옵션 설정을 위해 자기 자신(this)을 반환한다.
    • sort

      public FindOperation sort(AltibaseDocument aSort)
      조회 결과를 정렬할 기준을 지정한다.

      정렬 기준은 필드 이름을 키(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:
      sort in interface FindOperation
      Parameters:
      aSort - 정렬 기준을 정의하는 AltibaseDocument 객체
      Returns:
      추가적인 옵션 설정을 위해 자기 자신(this)을 반환한다.
    • getName

      public String getName()
      컬렉션의 이름을 반환한다.
      Specified by:
      getName in interface AltibaseCollection
      Returns:
      컬렉션 이름
    • getGenerationType

      public KeyGenerationType getGenerationType()
      컬렉션의 키 생성 방식을 반환한다.
      Specified by:
      getGenerationType in interface AltibaseCollection
      Returns:
      KeyGenerationType (UUID 또는 CLIENT)
    • getMetadata

      public CollectionMetaData getMetadata()
      컬렉션의 메타데이터를 반환한다.
      Specified by:
      getMetadata in interface AltibaseCollection
      Returns:
      CollectionMetaData 객체
    • close

      public void close()
      이 컬렉션 인스턴스와 관련된 모든 리소스를 해제한다. try-with-resources 구문에 의해 자동으로 호출된다.
      Specified by:
      close in interface AltibaseCollection
      Specified by:
      close in interface AutoCloseable
    • closeResources

      public void closeResources()
      컬렉션이 내부적으로 캐싱하고 있는 리소스(예: PreparedStatement)를 명시적으로 해제한다. 일반적으로 AltibaseCollection.close()에 의해 호출된다.
      Specified by:
      closeResources in interface AltibaseCollection
    • setCurrentUserId

      public void setCurrentUserId(String aUserId)
      현재 작업을 수행하는 사용자 ID를 설정한다.

      설정된 사용자 ID는 문서 삽입 시 CREATED_BY 컬럼에, 문서 수정 시 LAST_MODIFIED_BY 컬럼에 기록된다. 이 메서드를 호출하지 않으면 감사 컬럼은 null로 저장된다.

      Specified by:
      setCurrentUserId in interface AltibaseCollection
      Parameters:
      aUserId - 현재 사용자 ID (null 허용)
    • getCurrentUserId

      public String getCurrentUserId()
      현재 설정된 사용자 ID를 반환한다.
      Specified by:
      getCurrentUserId in interface AltibaseCollection
      Returns:
      현재 사용자 ID (설정되지 않은 경우 null)