首页 > 数据库 > 数据库开发技术 > 亚马逊DynamoDB
@DynamoDBTable(tableName="People")public class Developer { ...}
@DynamoDBAttribute(attributeName = "Authors")public List<String> getBookAuthors() { return BookAuthors; }public void setBookAuthors(List<String> BookAuthors) { this.BookAuthors = BookAuthors; }
@DynamoDBTable(tableName="ProductCatalog")public class CatalogItem {private String Id;@DynamoDBHashKey(attributeName="Id")public String getId() {return Id;}public void setId(String Id) {this.Id = Id;}// Additional properties go here.}
@DynamoDBTable(tableName="Reply")public class Reply {private String id;private String replyDateTime;@DynamoDBHashKey(attributeName="Id")public String getId() { return id; }public void setId(String id) { this.id = id; }@DynamoDBRangeKey(attributeName="ReplyDateTime")public String getReplyDateTime() { return replyDateTime; }public void setReplyDateTime(String replyDateTime) { this.replyDateTime = replyDateTime; }// Additional properties go here.}
@DynamoDBTable(tableName="AutoGeneratedKeysExample")public class AutoGeneratedKeys {private String id;private String payload;@DynamoDBHashKey(attributeName = "Id")@DynamoDBAutoGeneratedKeypublic String getId() { return id; }public void setId(String id) { this.id = id; }@DynamoDBAttribute(attributeName="payload")public String getPayload() { return this.payload };public String setPayload(String payload) { this.payload = payload };public static void saveItem() {AutoGeneratedKeys obj = new AutoGeneratedKeys();obj.setPayload("abc123");// id field is null at this point DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient); mapper.save(obj); System.out.println("Object was saved with id " + obj.getId()); }}
mapper.save(obj, new DynamoDBMapperConfig(DynamoDBMapperConfig.SaveBehavior.CLOBBER));
CatalogItem item = mapper.load(CatalogItem.class, item.getId(),new DynamoDBMapperConfig(DynamoDBMapperConfig.ConsistentReads.CONSISTENT));
String forumName = "Amazon DynamoDB";String forumSubject = "DynamoDB Thread 1";String hashKey = forumName + "#" + forumSubject;long twoWeeksAgoMilli = (new Date()).getTime() - (14L*24L*60L*60L*1000L);Date twoWeeksAgo = new Date();twoWeeksAgo.setTime(twoWeeksAgoMilli);SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");String twoWeeksAgoStr = df.format(twoWeeksAgo);Condition rangeKeyCondition = new Condition().withComparisonOperator(ComparisonOperator.GT.toString()).withAttributeValueList(new AttributeValue().withS(twoWeeksAgoStr.toString()));Reply replyKey = new Reply();replyKey.setId(hashKey);DynamoDBQueryExpression<Reply> queryExpression = new DynamoDBQueryExpression<Reply>().withHashKeyValues(replyKey).withRangeKeyCondition("ReplyDateTime", rangeKeyCondition);List<Reply> latestReplies = mapper.query(Reply.class, queryExpression);
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();Map<String, Condition> scanFilter = new HashMap<String, Condition>();Condition scanCondition = new Condition().withComparisonOperator(ComparisonOperator.EQ.toString()).withAttributeValueList(new AttributeValue().withN("0"));scanFilter.put("Answered", scanCondition);scanExpression.setScanFilter(scanFilter);List<Thread> unansweredThreads = mapper.scan(Thread.class, scanExpression);
Book book1 = mapper.load(Book.class, 901);Book book2 = mapper.load(Book.class, 902);mapper.batchDelete(Arrays.asList(book1, book2));
Book book1 = new Book();book1.id = 901;book1.productCategory = "Book";book1.title = "Book 901 Title";Book book2 = new Book();book2.id = 902;book2.productCategory = "Book";book2.title = "Book 902 Title";mapper.batchSave(Arrays.asList(book1, book2));
// Create a Forum item to saveForum forumItem = new Forum();forumItem.name = "Test BatchWrite Forum";// Create a Thread item to saveThread threadItem = new Thread();threadItem.forumName = "AmazonDynamoDB";threadItem.subject = "My sample question";// Load a ProductCatalog item to deleteBook book3 = mapper.load(Book.class, 903);List<Object> objectsToWrite = Arrays.asList(forumItem, threadItem);List<Book> objectsToDelete = Arrays.asList(book3);mapper.batchWrite(objectsToWrite, objectsToDelete);
| Java类型 | Amazon DynamoDB类型 |
| 所有数字类型 | N(数字类型) |
| 弦乐 | S(字符串类型) |
| 布尔值 | N(数字类型),0或1。 |
| 字节缓冲区 | B(二进制类型) |
| 日期 | S(字符串类型)。 日期值存储为ISO-8601格式的字符串。 |
| 设置收集类型 | SS(字符串集)类型,NS(数字集)类型或BS(二进制集)类型。 |
import java.util.Set;import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;@DynamoDBTable(tableName="ProductCatalog")public class CatalogItem {private Integer id;private String title;private String ISBN;private Set bookAuthors;@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 getBookAuthors() { return bookAuthors; }public void setBookAuthors(Set bookAuthors) { this.bookAuthors = bookAuthors; }@Overridepublic String toString() {return "Book [ISBN=" + ISBN + ", bookAuthors=" + bookAuthors+ ", id=" + id + ", title=" + title + "]";}}
import java.io.IOException;import java.util.Arrays;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Random;import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.auth.AWSCredentials;import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;import com.amazonaws.regions.Region;import com.amazonaws.regions.Regions;import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig;import com.amazonaws.services.dynamodbv2.model.AttributeDefinition;import com.amazonaws.services.dynamodbv2.model.AttributeValue;import com.amazonaws.services.dynamodbv2.model.ComparisonOperator;import com.amazonaws.services.dynamodbv2.model.Condition;import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;import com.amazonaws.services.dynamodbv2.model.DescribeTableRequest;import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;import com.amazonaws.services.dynamodbv2.model.KeyType;import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;import com.amazonaws.services.dynamodbv2.model.ScalarAttributeType;import com.amazonaws.services.dynamodbv2.model.ScanRequest;import com.amazonaws.services.dynamodbv2.model.ScanResult;import com.amazonaws.services.dynamodbv2.model.TableDescription;import com.amazonaws.services.dynamodbv2.model.TableStatus;public class ObjectPersistenceCRUDExample {static AmazonDynamoDBClient client;private DynamoDBMapper mapper;private static int PRODUCT_ID;public static void main(String[] args) throws IOException {ObjectPersistenceCRUDExample demo = new ObjectPersistenceCRUDExample();demo.init();demo.createTable("ProductCatalog");for (int i = ; i < 100; i++) {System.out.println(i);PRODUCT_ID = PRODUCT_ID + i;demo.insert();}demo.getAllRows();CatalogItem itemRetrieved = demo.load(PRODUCT_ID);demo.update(itemRetrieved);CatalogItem updatedItem = demo.load(PRODUCT_ID);demo.delete(updatedItem);demo.load(updatedItem.getId());System.out.println("Example complete!");}private void init() {PRODUCT_ID = new Random().nextInt(1000);AWSCredentials credentials = new ClasspathPropertiesFileCredentialsProvider().getCredentials();client = new AmazonDynamoDBClient(credentials);Region usWest2 = Region.getRegion(Regions.US_WEST_2);client.setRegion(usWest2);mapper = new DynamoDBMapper(client);}private void createTable(String tableName) {try {CreateTableRequest createTableRequest = new CreateTableRequest().withTableName(tableName);createTableRequest.withKeySchema(new KeySchemaElement().withAttributeName("Id").withKeyType(KeyType.HASH));createTableRequest.withAttributeDefinitions(new AttributeDefinition().withAttributeName("Id").withAttributeType(ScalarAttributeType.N));createTableRequest.withProvisionedThroughput(new ProvisionedThroughput().withReadCapacityUnits(10L).withWriteCapacityUnits(10L));TableDescription createdTableDescription = client.createTable(createTableRequest).getTableDescription();System.out.println("Created Table: " + createdTableDescription);// Wait for it to become active waitForTableToBecomeAvailable(tableName); } catch (AmazonServiceException e) { e.printStackTrace(); } catch (AmazonClientException e) { e.printStackTrace(); } } private void waitForTableToBecomeAvailable(String tableName) { System.out.println("Waiting for " + tableName + " to become ACTIVE..."); long startTime = System.currentTimeMillis(); long endTime = startTime + (10 * 60 * 1000); while (System.currentTimeMillis() < endTime) { try { Thread.sleep(1000 * 20); } catch (Exception e) { } try { DescribeTableRequest request = new DescribeTableRequest() .withTableName(tableName); TableDescription tableDescription = client.describeTable( request).getTable(); String tableStatus = tableDescription.getTableStatus(); System.out.println(" - current state: " + tableStatus); if (tableStatus.equals(TableStatus.ACTIVE.toString())) return; } catch (AmazonServiceException ase) { if (ase.getErrorCode().equalsIgnoreCase( "ResourceNotFoundException") == false) throw ase; } } throw new RuntimeException("Table " + tableName + " never went active"); } private void insert() { CatalogItem item = new CatalogItem(); item.setId(PRODUCT_ID); item.setTitle("Book PRODUCT_ID"); item.setISBN("611-1111111111"); item.setBookAuthors(new HashSet(Arrays.asList("Author1", "Author2"))); // Save the item (book). mapper.save(item); } private void update(CatalogItem itemRetrieved) { itemRetrieved.setISBN("622-2222222222"); itemRetrieved.setBookAuthors(new HashSet(Arrays.asList( "Author1", "Author3"))); mapper.save(itemRetrieved); System.out.println("Item updated:"); System.out.println(itemRetrieved); } private void delete(CatalogItem updatedItem) { // Delete the item. mapper.delete(updatedItem); } private CatalogItem load(int id) { // Retrieve the updated item. DynamoDBMapperConfig config = new DynamoDBMapperConfig( DynamoDBMapperConfig.ConsistentReads.CONSISTENT); CatalogItem updatedItem = mapper.load(CatalogItem.class, id, config); if (updatedItem == null) { System.out.println("Done - Sample item is deleted."); } else { System.out.println("Retrieved item:"); System.out.println(updatedItem); } return updatedItem; } private void getAllRows() { ScanRequest scanRequest = new ScanRequest() .withTableName("ProductCatalog"); scanRequest.setLimit(10); HashMap scanFilter = new HashMap(); Condition condition = new Condition().withComparisonOperator( ComparisonOperator.EQ.toString()).withAttributeValueList( new AttributeValue().withS("611-1111111111")); scanFilter.put("ISBN", condition); Condition condition2 = new Condition().withComparisonOperator( ComparisonOperator.LE.toString()).withAttributeValueList( new AttributeValue().withN("1000")); scanFilter.put("Id", condition2); scanRequest.withScanFilter(scanFilter); try { System.out.println("Scan Request: " + scanRequest); ScanResult scanResponse = client.scan(scanRequest); for (Map item : scanResponse.getItems()) { System.out.println(item.get("Id").getN() + " , " + item.get("ISBN").getS() + " , " + item.get("Authors").getSS() + " , " + item.get("Title").getS()); } System.out.println("Scan Response: " + scanResponse); System.out.println("Count: " + scanResponse.getCount()); System.out.println("Scanned Count: " + scanResponse.getScannedCount()); System.out.println("Items: " + scanResponse.getItems()); } catch (AmazonServiceException e) { e.printStackTrace(); } catch (AmazonClientException e) { e.printStackTrace(); } }
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70031982/viewspace-2983750/ ,如需转载,请注明出处,否则将追究法律责任。