Support of DynamoDB for Spring Data

CAST supports DynamoDB via its com.castsoftware.nosqljava extension. Details about the support provided for Java with Spring Data source code is explained below.

Supported Client Libraries

LibraryVersionSupported
spring-data-dynamodbexternal linkUp to: 5.1.x

Supported Operations

OperationsScenarioMethod Supported
InsertSpring Frameworkorg.springframework.data.repository.CrudRepository.save
org.springframework.data.repository.CrudRepository.saveAll
InsertSocial SignInorg.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository.save
org.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository.saveAll
org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository.save
org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository.saveAll
org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.save
org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.batchSave
org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.load
org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.query
org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.scan
org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.count
org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.batchLoad
SelectSpring Frameworkorg.springframework.data.repository.CrudRepository.existsById
org.springframework.data.repository.CrudRepository.findAll
org.springframework.data.repository.CrudRepository.findById
org.springframework.data.repository.PagingAndSortingRepository.findAll
SelectSocial SignInorg.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository.existsById
org.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository.findAll
org.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository.findById
org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository.existsById
org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository.findById
org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository.findAll
DeleteSpring Frameworkorg.springframework.data.repository.CrudRepository.delete
org.springframework.data.repository.CrudRepository.deleteById
org.springframework.data.repository.CrudRepository.deleteAllById
org.springframework.data.repository.CrudRepository.deleteAll
DeleteSocial SignInorg.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository.delete
org.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository.deleteById
org.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository.deleteAllById
org.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository.deleteAll
org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository.delete
org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository.deleteById
org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository.deleteAllById
org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository.deleteAll
org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.delete
org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.batchDelete

Objects

IconDescription
Java_DynamoDB_Client
Java_DynamoDB_Table
Java_Unknown_DynamoDB_Client
Java_Unknown_DynamoDB_Table
Link typeSource and destination of linkMethods Supported
parentLinkBetween DynamoDB client object and DynamoDB table-
useInsertLinkBetween the caller Java Method objects and DynamoDB clientsave
saveAll
useSelectLinkBetween the caller Java Method objects and DynamoDB clientexistsById
findById
findAll
useDeleteLinkBetween the caller Java Method objects and DynamoDB clientdelete
deleteById
deleteAll
deleteAllById

What results can you expect?

Some example scenarios are shown below:

DynamoDB Client with Java Configuration

@Configuration
@EnableDynamoDBRepositories(basePackages = "com.javasampleapproach.dynamodb.repo")
public class DynamoDBConfig {

    @Value("${amazon.dynamodb.endpoint}")
    private String dBEndpoint;

    @Value("${amazon.aws.accesskey}")
    private String accessKey;

    @Value("${amazon.aws.secretkey}")
    private String secretKey;

    @Bean
    public AmazonDynamoDB amazonDynamoDB() {
        AmazonDynamoDB dynamoDB = new AmazonDynamoDBClient(amazonAWSCredentials());

        if (!StringUtils.isNullOrEmpty(dBEndpoint)) {
            dynamoDB.setEndpoint(dBEndpoint);
        }

        return dynamoDB;
    }

    @Bean
    public AWSCredentials amazonAWSCredentials() {
        return new BasicAWSCredentials(accessKey, secretKey);
    }
}

Select Operation

public String findAll() {
        String result = "";
        Iterable<Customer> customers = repository.findAll();

        for (Customer cust : customers) {
            result += cust.toString() + "<br>";
        }

        return result;
    }

Insert Operation

public String save() {
        // save a single Customer
        repository.save(new Customer("JSA-1", "Jack", "Smith"));

}

Delete Operation

public String delete() {
        repository.delete(new Customer("JSA-1", "Jack", "Smith"));
        repository.deleteAll();
        return "Done";
    }

Known Limitations

  • Client is created as unknown, if the name is not retrieved from the properties file or if the name is not be resolved.