Java 1.x: DynamoDBMapper - Amazon DynamoDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Java 1.x: DynamoDBMapper

O AWS SDK for Java fornece uma DynamoDBMapper classe, permitindo que você mapeie suas classes do lado do cliente para tabelas do Amazon DynamoDB. Para usar DynamoDBMapper, defina a relação entre os itens em uma tabela do DynamoDB e as instâncias de objeto correspondentes no seu código. A classe DynamoDBMapper permite que você realize várias operações de criação, leitura, atualização e exclusão (CRUD) em itens e execute consultas e verificações em tabelas.

nota

A classe DynamoDBMapper não permite criar, atualizar ou excluir tabelas. Para realizar essas tarefas, use em vez disso a interface do SDK para Java de baixo nível. Para ter mais informações, consulte Trabalhar com tabelas do DynamoDB em Java.

O SDK para Java fornece um conjunto de tipos de anotações, para que você possa mapear suas classes em tabelas. Por exemplo, considere uma tabela ProductCatalog cujo Id seja a chave de partição.

ProductCatalog(Id, ...)

É possível mapear uma classe no seu aplicativo cliente para a tabela ProductCatalog, conforme mostrado no código Java a seguir. Este código define um objeto Java antigo simples (POJO) chamado CatalogItem que usa anotações para mapear campos de objeto em nomes de atributos do DynamoDB.

exemplo
package com.amazonaws.codesamples; import java.util.Set; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIgnore; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; @DynamoDBTable(tableName="ProductCatalog") public class CatalogItem { private Integer id; private String title; private String ISBN; private Set<String> bookAuthors; private String someProp; @DynamoDBHashKey(attributeName="Id") public Integer getId() { return id; } public void setId(Integer id) {this.id = id; } @DynamoDBAttribute(attributeName="Title") public String getTitle() {return title; } public void setTitle(String title) { this.title = title; } @DynamoDBAttribute(attributeName="ISBN") public String getISBN() { return ISBN; } public void setISBN(String ISBN) { this.ISBN = ISBN; } @DynamoDBAttribute(attributeName="Authors") public Set<String> getBookAuthors() { return bookAuthors; } public void setBookAuthors(Set<String> bookAuthors) { this.bookAuthors = bookAuthors; } @DynamoDBIgnore public String getSomeProp() { return someProp; } public void setSomeProp(String someProp) { this.someProp = someProp; } }

No código anterior, a anotação @DynamoDBTable mapeia a classe CatalogItem para a tabela ProductCatalog. Você pode armazenar instâncias de classes individuais como itens na tabela. Na definição de classe, a anotação @DynamoDBHashKey mapeia a propriedade Id para a chave primária.

Por padrão, as propriedades da classe são mapeadas para os atributos com o mesmo nome na tabela. As propriedades Title e ISBN são mapeadas para os atributos com o mesmo nome na tabela.

A anotação @DynamoDBAttribute é opcional quando o nome do atributo do DynamoDB corresponde ao nome da propriedade declarada na classe. Quando esses nomes são diferentes, use essa anotação com o parâmetro attributeName para especificar a qual atributo do DynamoDB essa propriedade corresponde.

No exemplo anterior, a anotação @DynamoDBAttribute é adicionada a cada propriedade para garantir que os nomes de propriedades correspondam exatamente às tabelas criadas em Criar tabelas e carregar dados para exemplos de código no DynamoDB e sejam consistentes com os nomes de atributos usados em outros exemplos de código neste guia.

Sua definição de classe pode ter propriedades que não são mapeadas para atributos na tabela. Para identificar essas propriedades, adicione a anotação @DynamoDBIgnore. No exemplo anterior, a propriedade SomeProp está marcada com a anotação @DynamoDBIgnore. Ao carregar uma instância CatalogItem na tabela, sua instância DynamoDBMapper não inclui a propriedade SomeProp. Além disso, o mapeador não retorna esse atributo quando você recupera um item da tabela.

Depois de definir sua classe de mapeamento, é possível usar métodos DynamoDBMapper para gravar uma instância dessa classe em um item correspondente na tabela Catalog. O exemplo de código a seguir demonstra essa técnica.

AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDBMapper mapper = new DynamoDBMapper(client); CatalogItem item = new CatalogItem(); item.setId(102); item.setTitle("Book 102 Title"); item.setISBN("222-2222222222"); item.setBookAuthors(new HashSet<String>(Arrays.asList("Author 1", "Author 2"))); item.setSomeProp("Test"); mapper.save(item);

O exemplo de código a seguir mostra como recuperar o item e acessar alguns dos seus atributos.

CatalogItem partitionKey = new CatalogItem(); partitionKey.setId(102); DynamoDBQueryExpression<CatalogItem> queryExpression = new DynamoDBQueryExpression<CatalogItem>() .withHashKeyValues(partitionKey); List<CatalogItem> itemList = mapper.query(CatalogItem.class, queryExpression); for (int i = 0; i < itemList.size(); i++) { System.out.println(itemList.get(i).getTitle()); System.out.println(itemList.get(i).getBookAuthors()); }

O DynamoDBMapper oferece uma forma intuitiva e natural de trabalhar com dados do DynamoDB no Java. Ele também fornece uma série de recursos internos, como bloqueio otimista, transações ACID, valores de chave de partição e chave de classificação gerados automaticamente e versionamento de objetos.