io.awspring.cloud.dynamodb.DynamoDbTemplate Maven / Gradle / Ivy
/*
* Copyright 2013-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.awspring.cloud.dynamodb;
import java.util.Collections;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
import software.amazon.awssdk.enhanced.dynamodb.Key;
import software.amazon.awssdk.enhanced.dynamodb.model.PageIterable;
import software.amazon.awssdk.enhanced.dynamodb.model.QueryEnhancedRequest;
import software.amazon.awssdk.enhanced.dynamodb.model.ScanEnhancedRequest;
/**
* Default implementation of {@link DynamoDbOperations}.
*
* @author Matej Nedic
* @author Arun Patra
* @author Maciej Walkowiak
* @since 3.0
*/
public class DynamoDbTemplate implements DynamoDbOperations {
private final DynamoDbEnhancedClient dynamoDbEnhancedClient;
private final DynamoDbTableSchemaResolver dynamoDbTableSchemaResolver;
private final DynamoDbTableNameResolver tableNameResolver;
public DynamoDbTemplate(@Nullable String tablePrefix, DynamoDbEnhancedClient dynamoDbEnhancedClient) {
this(dynamoDbEnhancedClient, new DefaultDynamoDbTableSchemaResolver(Collections.emptyList()),
new DefaultDynamoDbTableNameResolver(tablePrefix));
}
public DynamoDbTemplate(DynamoDbEnhancedClient dynamoDbEnhancedClient) {
this(dynamoDbEnhancedClient, new DefaultDynamoDbTableSchemaResolver(Collections.emptyList()),
new DefaultDynamoDbTableNameResolver());
}
public DynamoDbTemplate(DynamoDbEnhancedClient dynamoDbEnhancedClient,
DynamoDbTableSchemaResolver dynamoDbTableSchemaResolver, DynamoDbTableNameResolver tableNameResolver) {
this.dynamoDbEnhancedClient = dynamoDbEnhancedClient;
this.dynamoDbTableSchemaResolver = dynamoDbTableSchemaResolver;
this.tableNameResolver = tableNameResolver;
}
public T save(T entity) {
Assert.notNull(entity, "entity is required");
prepareTable(entity).putItem(entity);
return entity;
}
public T update(T entity) {
Assert.notNull(entity, "entity is required");
return prepareTable(entity).updateItem(entity);
}
public T delete(Key key, Class clazz) {
Assert.notNull(key, "key is required");
Assert.notNull(clazz, "clazz is required");
return prepareTable(clazz).deleteItem(key);
}
public T delete(T entity) {
Assert.notNull(entity, "entity is required");
return prepareTable(entity).deleteItem(entity);
}
@Nullable
public T load(Key key, Class clazz) {
Assert.notNull(key, "key is required");
Assert.notNull(clazz, "clazz is required");
return prepareTable(clazz).getItem(key);
}
public PageIterable scan(ScanEnhancedRequest scanEnhancedRequest, Class clazz) {
Assert.notNull(scanEnhancedRequest, "scanEnhancedRequest is required");
Assert.notNull(clazz, "clazz is required");
return prepareTable(clazz).scan(scanEnhancedRequest);
}
public PageIterable scan(ScanEnhancedRequest scanEnhancedRequest, Class clazz, String indexName) {
return PageIterable.create(prepareTable(clazz).index(indexName).scan(scanEnhancedRequest));
}
public PageIterable scanAll(Class clazz, String indexName) {
return PageIterable.create(prepareTable(clazz).index(indexName).scan());
}
public PageIterable query(QueryEnhancedRequest queryEnhancedRequest, Class clazz, String indexName) {
return PageIterable.create(prepareTable(clazz).index(indexName).query(queryEnhancedRequest));
}
public PageIterable scanAll(Class clazz) {
Assert.notNull(clazz, "clazz is required");
return prepareTable(clazz).scan();
}
public PageIterable query(QueryEnhancedRequest queryEnhancedRequest, Class clazz) {
Assert.notNull(queryEnhancedRequest, "queryEnhancedRequest is required");
Assert.notNull(clazz, "clazz is required");
return prepareTable(clazz).query(queryEnhancedRequest);
}
private DynamoDbTable prepareTable(T entity) {
Assert.notNull(entity, "entity is required");
String tableName = tableNameResolver.resolve(entity.getClass());
return (DynamoDbTable) dynamoDbEnhancedClient.table(tableName,
dynamoDbTableSchemaResolver.resolve(entity.getClass()));
}
private DynamoDbTable prepareTable(Class clazz) {
Assert.notNull(clazz, "clazz is required");
String tableName = tableNameResolver.resolve(clazz);
return dynamoDbEnhancedClient.table(tableName, dynamoDbTableSchemaResolver.resolve(clazz));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy