Support of DynamoDB for Java

CAST supports DynamoDB via its com.castsoftware.nosqljava extension. Details about how this support is provided for Java source code is discussed below.

Supported Client Libraries

Library Supported
AWS SDK for Java API - v1  (tick)
AWS SDK for Java API - v2 (tick)

Supported Operations

Operations Scenario Methods Supported
Insert AWS SDK JAVA v1

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.putItem

com.amazonaws.services.dynamodbv2.document.Table.putItem

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.putItemAsync

com.amazonaws.services.dynamodbv2.document.DynamoDB.createTable

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.createTableAsync

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.createTable

com.amazonaws.services.dynamodbv2.util.TableUtils.createTableIfNotExists

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.batchWriteItem

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.batchWriteItemAsync

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.transactWriteItems

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.transactWriteItemsAsync

Insert DDB Mapper v1

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.save

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.batchSave

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.batchSave

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.batchWrite

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.batchWrite

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.transactionWrite

com.amazonaws.services.dynamodbv2.datamodeling.TransactionWriteRequest.addPut

Insert AWS SDK JAVA v2

software.amazon.awssdk.services.dynamodb.DynamoDbClient.putItem

software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient.putItem

software.amazon.awssdk.services.dynamodb.DynamoDbClient.createTable

software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient.createTable

software.amazon.awssdk.services.dynamodb.waiters.DynamoDbWaiter.createTable

Insert Enhanced v2

software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable.putItem

software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable.putItemWithResponse

software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable.putItem

software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable.putItemWithResponse

software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest.Builder.addPutItem

software.amazon.awssdk.enhanced.dynamodb.model.BatchWriteItemEnhancedRequest.Builder.writeBatches

Update AWS SDK JAVA v1

com.amazonaws.services.dynamodbv2.document.Table.updateTable

com.amazonaws.services.dynamodbv2.document.Table.upateItem

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.updateItem

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.updateItemAsync

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.updateTable

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.updateTableAsync

Update DDB Mapper v1

com.amazonaws.services.dynamodbv2.datamodeling.TransactionWriteRequest.addUpdate

Update AWS SDK JAVA v2

software.amazon.awssdk.services.dynamodb.DynamoDbClient.updateTable

software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient.updateTable

software.amazon.awssdk.services.dynamodb.DynamoDbClient.updateItem

software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient.updateItem

Update Enhanced v2

software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable.updateItem

software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable.updateItem

software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable.updateItemWithResponse

software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable.updateItemWithResponse

software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest.Builder.addUpdateItem

Select AWS SDK JAVA v1

com.amazonaws.services.dynamodbv2.document.Table.query

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.query

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.queryAsync

com.amazonaws.services.dynamodbv2.document.Table.scan

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.scan

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.scanAsync

com.amazonaws.services.dynamodbv2.document.Table.describe

com.amazonaws.services.dynamodbv2.document.Table.getTableName

com.amazonaws.services.dynamodbv2.document.Table.getItemOutcome

com.amazonaws.services.dynamodbv2.document.Table.getItem

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.getItem

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.getItemAsync

com.amazonaws.services.dynamodbv2.document.DynamoDB.getTable

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.describeTable

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.describeTableAsync

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.batchGetItem

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.batchGetItemAsync

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.transactGetItems

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.transactGetItemsAsync

Select DDB Mapper v1

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.load

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.load

com.amazonaws.services.dynamodbv2.datamodeling.TransactionLoadRequest.addLoad

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.scan

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.scan

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.query

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.query

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.count

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.count

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.scanPage

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.ScanPage

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.queryPage

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.queryPage

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.parallelScan

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.parallelScan

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.getTableModel

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.getTableModel

Select AWS SDK JAVA v2

software.amazon.awssdk.services.dynamodb.DynamoDbClient.describeTable

software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient.describeTable

software.amazon.awssdk.services.dynamodb.DynamoDbClient.getItem

software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient.getItem

software.amazon.awssdk.services.dynamodb.DynamoDbClient.query

software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient.query

software.amazon.awssdk.services.dynamodb.DynamoDbClient.scan

software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient.scan

Select Enhanced v2

software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient.table

software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient.table

software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable.getItem

software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable.getItem

software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable.query

software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable.query

software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable.scan

software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable.scan

software.amazon.awssdk.enhanced.dynamodb.model.BatchGetItemEnhancedRequest.Builder.readBatches

software.amazon.awssdk.enhanced.dynamodb.model.TransactGetItemsEnhancedRequest.Builder.addGetItem

Delete AWS SDK JAVA v1

com.amazonaws.services.dynamodbv2.document.Table.deleteItem

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.deleteItem

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.deletItemAsync

com.amazonaws.services.dynamodbv2.document.Table.delete

com.amazonaws.services.dynamodbv2.AmazonDynamoDB.deleteTable

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync.deleteTableAsync

com.amazonaws.services.dynamodbv2.util.TableUtils.deleteTableIfExists

Delete DDB Mapper v1

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.delete

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.delete

com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.batchDelete

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.batchDelete

com.amazonaws.services.dynamodbv2.datamodeling.TransactionWriteRequest.addDelete

Delete AWS SDK JAVA v2

software.amazon.awssdk.services.dynamodb.DynamoDbClient.deleteTable

software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient.deleteTable

software.amazon.awssdk.services.dynamodb.DynamoDbClient.deleteItem

software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient.deleteItem

Delete Enhanced v2

software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable.deleteItem

software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable.deleteItem

software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable.deleteItemWithResponse

software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable.deleteItemWithResponse

software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest.Builder.addDeleteItem

Note: batchWriteItems, transactWriteItems may result in useInsertLink, useUpdateLink or useDeleteLink depnding on the usage.

Objects

Icon Description

Java AWS DynamoDB Client

Java AWS DynamoDB Table

Java AWS Unknown DynamoDB Client

Java AWS Unknown DynamoDB Table
Link type Source and destination of link Methods Supported in AWS SDK Java v1 Methods Supported in AWS SDK Java v1 DynamoDB Mapper Methods Supported in AWS SDK Java v2 Methods Supported in v2 Enhanced Remarks
belongsTo

From Java AWS DynamoDB Table object to Java AWS DynamoDB Client object

- - - - -
useLink Between the caller Java Method objects and Java AWS DynamoDB table object

createTable

createTableAsync

-

createTable

- -
useInsertLink Between the caller Java Method objects and Java AWS DynamoDB table object

putItem

putItemAsync

save

batchSave

putItem

putItem

putItemWithResponse

batchWriteItems, transactWriteItems may result in useInsertLink, useUpdateLink or useDeleteLink depnding on the usage.
useUpdateLink Between the caller Java Method objects and Java AWS DynamoDB table object

updateTable

updateItem

updateTableAsync

updateItemAsync

-

updateTable

updateItem

updateItem

updateItemWithReponse

As above

useSelectLink

Between the caller Java Method objects and Java AWS DynamoDB table object

query

queryAsync

describeTable

describeTableAsync

getItem

getItemAsync

batchGetItem

batchGetItemAsync

transactGetItems

transactGetItemsAsync

load

query

count

scan

scanPage

queryPage

parallelScan

getTableModel

batchLoad

transasctionLoad

describeTable

getItem

query

scan

getItem

query

scan

readBatches

batchGetItem

transactGetItems

As above
useDeleteLink Between the caller Java Method objects and Java AWS DynamoDB table object

DeleteTable

DeleteItem

delete

batchDelete

deleteTable

deleteItem

deleteItem

deleteItemWithResponse

As above

What results can you expect?

Some example scenarios are shown below:

AWS SDK JAVA v1

DynamoDB Client Configuration

public static void main(String[] args)
    {
        final String USAGE = "\n" +
            "Usage:\n" +
            "    CreateTable <table>\n\n" +
            "Where:\n" +
            "    table - the table to create.\n\n" +
            "Example:\n" +
            "    CreateTable HelloTable\n";

        if (args.length < 1) {
            System.out.println(USAGE);
            System.exit(1);
        }

        /* Read the name from command args */
        String table_name = "Customer Table";

        System.out.format(
            "Creating table \"%s\" with a simple primary key: \"Name\".\n",
            table_name);

        CreateTableRequest request = new CreateTableRequest()
            .withAttributeDefinitions(new AttributeDefinition(
                     "Name", ScalarAttributeType.S))
            .withKeySchema(new KeySchemaElement("Name", KeyType.HASH))
            .withProvisionedThroughput(new ProvisionedThroughput(
                     new Long(10), new Long(10)))
            .withTableName(table_name);

        final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();

        try {
            CreateTableResult result = ddb.createTable(request);
            System.out.println(result.getTableDescription().getTableName());
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }
        System.out.println("Done!");
    }

Insert Operation

public static void main(String args[]) throws InterruptedException {

        AmazonDynamoDB dynamoDBClient = AmazonDynamoDBClientBuilder
            .standard()
            .withRegion(Regions.US_EAST_2)
            .withCredentials(new DefaultAWSCredentialsProviderChain())
            .build();
        int maxItemCount = 100;
        for (Integer i = 1; i <= maxItemCount; i++) {
            System.out.println("Processing item " + i + " of " + maxItemCount);

            // Write a new item
            Map<String, AttributeValue> item = new HashMap<>();
            item.put("Id", new AttributeValue().withN(i.toString()));
            item.put("Message", new AttributeValue().withS("New item!"));
            dynamoDBClient.putItem(tableName, item);
    }
}

Delete Operation

public static void TestDeleteTable() {
        String table_name = "Products2";

        DeleteTableRequest request = new DeleteTableRequest().withTableName(table_name);

        final AmazonDynamoDB ddb2 = AmazonDynamoDBClientBuilder.defaultClient();

        try {
            ddb2.deleteTable(request);
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }
        System.out.println("Done!");

    }

Update Operation

 public static void main(String args[]) throws InterruptedException {

        AmazonDynamoDB dynamoDBClient = AmazonDynamoDBClientBuilder
            .standard()
            .withRegion(Regions.US_EAST_2)
            .withCredentials(new DefaultAWSCredentialsProviderChain())
            .build();
    
         Map<String, AttributeValue> key = new HashMap<>();
            key.put("Id", new AttributeValue().withN(i.toString()));
            Map<String, AttributeValueUpdate> attributeUpdates = new HashMap<>();
            attributeUpdates.put("Message", new AttributeValueUpdate()
                .withAction(AttributeAction.PUT)
                .withValue(new AttributeValue()
                    .withS("This item has changed")));
            dynamoDBClient.updateItem(tableName, key, attributeUpdates);

Select Operation

 public static void main(String args[]) throws InterruptedException {

        AmazonDynamoDB dynamoDBClient = AmazonDynamoDBClientBuilder
            .standard()
            .withRegion(Regions.US_EAST_2)
            .withCredentials(new DefaultAWSCredentialsProviderChain())
            .build();
        String tableName = "TestTableForStreams";
        // Print the stream settings for the table
        DescribeTableResult describeTableResult = dynamoDBClient.describeTable(tableName);
        String streamArn = describeTableResult.getTable().getLatestStreamArn();
        System.out.println("Current stream ARN for " + tableName + ": " +
            describeTableResult.getTable().getLatestStreamArn());

Batch Operations

BatchWriteRequest

Map<String, AttributeValue> book_item1 = new HashMap<String, AttributeValue>();

WriteRequest req1= new WriteRequest().withDeleteRequest(new DeleteRequest(book_item1));
WriteRequest req2= new WriteRequest().withPutRequest(new PutRequest(book_item2));

List<WriteRequest> requests1=new ArrayList<WriteRequest>();
requests1.add(req1);
requests1.add(req2);

List<WriteRequest> requests2=new ArrayList<WriteRequest>();
requests2.add(new WriteRequest().withDeleteRequest(new DeleteRequest(book_item3)));

Map<String, List<WriteRequest>> requestItems = new HashMap<String, List<WriteRequest>>() ;
requestItems.put("table1",requests1);
requestItems.put("table2",requests2);
BatchWriteItemRequest batchWriteItemRequest1=new BatchWriteItemRequest().withRequestItems(requestItems);
ddb1.batchWriteItem(batchWriteItemRequest1) ;   

BatchGetItemRequest

KeysAndAttributes item1 =  null;
KeysAndAttributes item2 =  null;
        
Map<String, KeysAndAttributes> requestItems = new HashMap<String, KeysAndAttributes>();
requestItems.put("table1",item1);
requestItems.put("table2",item2);
        
        
BatchGetItemRequest batchGetItemRequest1 = new BatchGetItemRequest().withRequestItems(requestItems);
ddb2.batchGetItem(batchGetItemRequest1) ;   

TransactWriteItemsRequest

Put putItem1= new Put().withTableName("table1").withItem(book_item1);
Delete deleteItem1= new Delete().withTableName("table1").withKey(book_item2);
Update updateItem1=new Update().withTableName("table2").withKey(book_item3);
        
TransactWriteItem transactItem1=new TransactWriteItem().withPut(putItem1);
TransactWriteItem transactItem2=new TransactWriteItem().withDelete(deleteItem1);
TransactWriteItem transactItem3=new TransactWriteItem().withUpdate(updateItem1);
  
TransactWriteItemsRequest  transactWriteItemsRequest= new TransactWriteItemsRequest().withTransactItems(transactItem1,transactItem2,transactItem3);
            
ddb3.transactWriteItems(transactWriteItemsRequest);

TransactGetItemsRequest

Get getItem1= new Get().withTableName("table1").withKey(book_item1);
Get getItem2=new Get().withTableName("table2").withKey(book_item2);
        
TransactGetItem transactItem1=new TransactGetItem().withGet(getItem1);
TransactGetItem transactItem2=new TransactGetItem().withGet(getItem2);
  
TransactGetItemsRequest  transactGetItemsRequest= new TransactGetItemsRequest().withTransactItems(transactItem1,transactItem2);
        
ddb4.transactGetItems(transactGetItemsRequest);

AWS SDK JAVA v1 DynamoDB Mapper

Insert Operation

public void likeMysfit(String mysfitId) {

        Mysfit mysfitToUpdate = mapper.load(Mysfit.class, mysfitId);
        Integer likes = mysfitToUpdate.getLikes() + 1;
        mysfitToUpdate.setLikes(likes);
        mapper.save(mysfitToUpdate);

    }

Select Operation

public Mysfits queryMysfits(String filter, String value) {

        HashMap<String, AttributeValue> attribValue = new HashMap<String, AttributeValue>();
        attribValue.put(":"+value,  new AttributeValue().withS(value));

        DynamoDBQueryExpression<Mysfit> queryExpression = new DynamoDBQueryExpression<Mysfit>()
                .withIndexName(filter+"Index")
                .withKeyConditionExpression(filter + "= :" + value)
                .withExpressionAttributeValues(attribValue)
                .withConsistentRead(false);

        List<Mysfit> mysfits = mapper.query(Mysfit.class, queryExpression);
        Mysfits allMysfits = new Mysfits(mysfits);

        return allMysfits;
    }

AWS SDK JAVA v2 

Insert Operation

public static void putItemInTable(DynamoDbClient ddb,
                                      String tableName,
                                      String key,
                                      String keyVal,
                                      String albumTitle,
                                      String albumTitleValue,
                                      String awards,
                                      String awardVal,
                                      String songTitle,
                                      String songTitleVal){

        HashMap<String,AttributeValue> itemValues = new HashMap<String,AttributeValue>();

        // Add all content to the table
        itemValues.put(key, AttributeValue.builder().s(keyVal).build());
        itemValues.put(songTitle, AttributeValue.builder().s(songTitleVal).build());
        itemValues.put(albumTitle, AttributeValue.builder().s(albumTitleValue).build());
        itemValues.put(awards, AttributeValue.builder().s(awardVal).build());

        PutItemRequest request = PutItemRequest.builder()
                .tableName(tableName)
                .item(itemValues)
                .build();

        try {
            ddb.putItem(request);
            System.out.println(tableName +" was successfully updated");

        } catch (ResourceNotFoundException e) {
            System.err.format("Error: The Amazon DynamoDB table \"%s\" can't be found.\n", tableName);
            System.err.println("Be sure that it exists and that you've typed its name correctly!");
            System.exit(1);
}

Delete Operation

public static void deleteDynamoDBTable(DynamoDbClient ddb, String tableName) {

        DeleteTableRequest request = DeleteTableRequest.builder()
                .tableName(tableName)
                .build();

        try {
            ddb.deleteTable(request);

        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
        System.out.println(tableName +" was successfully deleted!");
    }

Update Operation

public static void updateDynamoDBTable(DynamoDbClient ddb,
                                           String tableName,
                                           Long readCapacity,
                                           Long writeCapacity) {

        System.out.format(
                "Updating %s with new provisioned throughput values\n",
                tableName);
        System.out.format("Read capacity : %d\n", readCapacity);
        System.out.format("Write capacity : %d\n", writeCapacity);

        ProvisionedThroughput tableThroughput = ProvisionedThroughput.builder()
                .readCapacityUnits(readCapacity)
                .writeCapacityUnits(writeCapacity)
                .build();

        UpdateTableRequest request = UpdateTableRequest.builder()
                .provisionedThroughput(tableThroughput)
                .tableName(tableName)
                .build();

        try {
            ddb.updateTable(request);
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }

        System.out.println("Done!");
    }
public static void updateDynamoDBTable(DynamoDbClient ddb,
                                           String tableName,
                                           Long readCapacity,
                                           Long writeCapacity) {

        System.out.format(
                "Updating %s with new provisioned throughput values\n",
                tableName);
        System.out.format("Read capacity : %d\n", readCapacity);
        System.out.format("Write capacity : %d\n", writeCapacity);

        ProvisionedThroughput tableThroughput = ProvisionedThroughput.builder()
                .readCapacityUnits(readCapacity)
                .writeCapacityUnits(writeCapacity)
                .build();

        UpdateTableRequest request = UpdateTableRequest.builder()
                .provisionedThroughput(tableThroughput)
                .tableName(tableName)
                .build();

        try {
            ddb.updateTable(request);
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }

        System.out.println("Done!");
    }

Select Operation

public static int queryTable(DynamoDbClient ddb,
                                 String tableName,
                                 String partitionKeyName,
                                 String partitionKeyVal,
                                 String partitionAlias) {

        HashMap<String,String> attrNameAlias = new HashMap<String,String>();
        attrNameAlias.put(partitionAlias, partitionKeyName);

        // Set up mapping of the partition name with the value
        HashMap<String, AttributeValue> attrValues =
                new HashMap<String,AttributeValue>();

        attrValues.put(":"+partitionKeyName, AttributeValue.builder()
                .s(partitionKeyVal)
                .build());

        QueryRequest queryReq = QueryRequest.builder()
                .tableName(tableName)
                .keyConditionExpression(partitionAlias + " = :" + partitionKeyName)
                .expressionAttributeNames(attrNameAlias)
                .expressionAttributeValues(attrValues)
                .build();

        try {
            QueryResponse response = ddb.query(queryReq);
            return response.count();
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
       return -1;
    }

AWS JAVA SDK v2 - Enhanced

Insert Operation

public static void putRecord(DynamoDbEnhancedClient enhancedClient) {

        try {
            DynamoDbTable<Customer> custTable = enhancedClient.table("Customer", TableSchema.fromBean(Customer.class));

            // Create an Instant
            LocalDate localDate = LocalDate.parse("2021-08-16");
            LocalDateTime localDateTime = localDate.atStartOfDay();
            Instant instant = localDateTime.toInstant(ZoneOffset.UTC);

            // Populate the Table
            Customer custRecord = new Customer();
            custRecord.setCustName("Susan red");
            custRecord.setId("id66");
            custRecord.setEmail("abc@xyz.com");
            custRecord.setRegistrationDate(instant) ;

            // Put the customer data into a DynamoDB table
            custTable.putItem(custRecord);

        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
        System.out.println("done");
    }

Update Operation

public static String modifyItem(DynamoDbEnhancedClient enhancedClient, String keyVal, String email) {
        try {
            //Create a DynamoDbTable object
            DynamoDbTable<Customer> mappedTable = enhancedClient.table("Customer", TableSchema.fromBean(Customer.class));

            //Create a KEY object
            Key key = Key.builder()
                    .partitionValue(keyVal)
                    .build();

            // Get the item by using the key and update the email value.
            Customer customerRec = mappedTable.getItem(r->r.key(key));
            customerRec.setEmail(email);
            mappedTable.updateItem(customerRec);
            return customerRec.getEmail();

        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
        return "";
    }

Select Operation

public static String getItem(DynamoDbEnhancedClient enhancedClient) {
        try {
            //Create a DynamoDbTable object
            DynamoDbTable<Customer> mappedTable = enhancedClient.table("Customer", TableSchema.fromBean(Customer.class));

            //Create a KEY object
            Key key = Key.builder()
                    .partitionValue("id120")
                    .build();

            // Get the item by using the key
            Customer result = mappedTable.getItem(r->r.key(key));
            return "The email valie is "+result.getEmail();

        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }

}

Region_property

public static void main(String[] args) {
        
        final String usage = "\n" +
             "Usage:\n" +
             "    <tableName>\n\n" +
             "Where:\n" +
             "    tableName - The Amazon DynamoDB table to get information about (for example, Music3).\n\n" ;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String tableName = "Test";
        System.out.format("Getting description for %s\n\n", tableName);

                
        Regions region = Regions.US_WEST_2;     
        AmazonDynamoDB ddb1 = AmazonDynamoDBClientBuilder.standard()
        .withRegion(region)
        .build();
        
        CreateTableRequest request = new CreateTableRequest()
                .withAttributeDefinitions(new AttributeDefinition("Name", ScalarAttributeType.S))
                .withKeySchema(new KeySchemaElement("Name", KeyType.HASH))
                .withProvisionedThroughput(new ProvisionedThroughput(new Long(10), new Long(10))).withTableName(Table1);

        
        
        TestDescribeTable(ddb1,tableName);
        ddb1.close();
    
        System.out.println("Done!");

    }

    

    public static void TestDescribeTable(AmazonDynamoDB ddb1,String tableName) {

        
        System.out.format("Getting description for %s\n\n", table_name);

        

        try {
            DescribeTableResult table_info1 = ddb1.describeTable(tableName);
//               ddb4.describeTable(table_name).getTable();

            TableDescription table_info = table_info1.getTable();

            if (table_info != null) {
                System.out.format("Table name  : %s\n", table_info.getTableName());
                System.out.format("Table ARN   : %s\n", table_info.getTableArn());
                System.out.format("Status      : %s\n", table_info.getTableStatus());
                System.out.format("Item count  : %d\n", table_info.getItemCount().longValue());
                System.out.format("Size (bytes): %d\n", table_info.getTableSizeBytes().longValue());

                ProvisionedThroughputDescription throughput_info = table_info.getProvisionedThroughput();
                System.out.println("Throughput");
                System.out.format("  Read Capacity : %d\n", throughput_info.getReadCapacityUnits().longValue());
                System.out.format("  Write Capacity: %d\n", throughput_info.getWriteCapacityUnits().longValue());

                List<AttributeDefinition> attributes = table_info.getAttributeDefinitions();
                System.out.println("Attributes");
                for (AttributeDefinition a : attributes) {
                    System.out.format("  %s (%s)\n", a.getAttributeName(), a.getAttributeType());
                }
            }
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }
        System.out.println("\nDone!");
    }

        }

Known Limitations

  • If the table name is not resolved in the CRUD API, then the link is created with an unknown Table object