데이터 TableSchema 클래스에서 a 생성 - AWS SDK for Java 2.x

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

데이터 TableSchema 클래스에서 a 생성

TableSchema를 사용하면 향상된 클라이언트가 DynamoDB 속성 값을 클라이언트 측 클래스와 매핑하거나 클라이언트 측 클래스에서 가져올 수 있습니다. 이 자습서에서는 정적 데이터 클래스에서 파생되고 빌더를 사용하여 코드에서 생성되는 TableSchema에 대해 알아봅니다.

주석이 달린 데이터 클래스 사용하기

Java 2.x용 SDK에는 데이터 클래스와 함께 신속하게 TableSchema를 생성하는 데 사용할 수 있는 일련의 주석이 포함되어 있습니다.

JavaBean 사양을 준수하는 데이터 클래스를 만드는 것부터 시작하십시오. 이 사양에서는 클래스에 인수가 없는 공용 생성자가 있어야 하고 클래스의 각 속성에 대한 접근자와 설정자가 있어야 합니다. 데이터 클래스가 DynamoDbBean임을 나타내는 클래스 수준 주석을 포함하세요. 또한 최소한 접근자 또는 설정자에 기본 키 속성에 대한 DynamoDbPartitionKey 주석을 포함해야 합니다.

속성 수준 주석을 게터 또는 세터에 적용할 수 있지만 둘 다에 적용할 수는 없습니다.

참고

property이 용어는 일반적으로 a로 캡슐화된 값에 사용됩니다. JavaBean 하지만 이 가이드에서는 DynamoDB에서 사용하는 용어와의 일관성을 위해 용어 attribute를 대신 사용합니다.

다음 Customer 클래스는 클래스 정의를 DynamoDB 테이블에 연결하는 주석을 보여줍니다.

Customer 클래스

package org.example.tests.model; import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean; import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey; import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbSortKey; import java.time.Instant; @DynamoDbBean public class Customer { private String id; private String name; private String email; private Instant regDate; @DynamoDbPartitionKey public String getId() { return this.id; } public void setId(String id) { this.id = id; } public String getCustName() { return this.name; } public void setCustName(String name) { this.name = name; } @DynamoDbSortKey public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } public Instant getRegistrationDate() { return this.regDate; } public void setRegistrationDate(Instant registrationDate) { this.regDate = registrationDate; } @Override public String toString() { return "Customer [id=" + id + ", name=" + name + ", email=" + email + ", regDate=" + regDate + "]"; } }

주석이 달린 데이터 클래스를 만든 후 다음 코드 조각에 표시된 것처럼 이 클래스를 사용하여 TableSchema를 생성합니다.

static final TableSchema<Customer> customerTableSchema = TableSchema.fromBean(Customer.class);

TableSchema는 정적이고 변경할 수 없도록 설계되었습니다. 일반적으로 클래스 로드 시 인스턴스화할 수 있습니다.

정적 TableSchema.fromBean() 팩토리 메서드는 Bean을 검사하여 DynamoDB 속성과 데이터 클래스 속성 (속성) 간의 매핑을 생성합니다.

여러 데이터 클래스로 구성된 데이터 모델을 사용하는 예제는 중첩 속성 작업 단원의 Person 클래스를 참조하세요.

빌더 사용

코드에 테이블 스키마를 정의하면 Bean 인트로스펙션 비용을 건너뛸 수 있습니다. 스키마를 코딩하면 클래스가 JavaBean 이름 지정 표준을 따르거나 주석을 달 필요가 없습니다. 다음 예제는 빌더를 사용하며 주석을 사용하는 Customer 클래스 예제와 동일합니다.

static final TableSchema<Customer> customerTableSchema = TableSchema.builder(Customer.class) .newItemSupplier(Customer::new) .addAttribute(String.class, a -> a.name("id") .getter(Customer::getId) .setter(Customer::setId) .tags(StaticAttributeTags.primaryPartitionKey())) .addAttribute(String.class, a -> a.name("email") .getter(Customer::getEmail) .setter(Customer::setEmail) .tags(StaticAttributeTags.primarySortKey())) .addAttribute(String.class, a -> a.name("name") .getter(Customer::getCustName) .setter(Customer::setCustName)) .addAttribute(Instant.class, a -> a.name("registrationDate") .getter(Customer::getRegistrationDate) .setter(Customer::setRegistrationDate)) .build();