使用 DynamoDBMapper 按列查询 DynamoDB
Query DynamoDB by column using DynamoDBMapper
我正在使用 loacalstack 和 dynamodb 设置。 Iv a table 有两列,一个 Id 和一个 name 列。我正在努力使用 DynamoDBMapper 通过 'name' 查询 table。下面是我的设置片段
实体>
@AllArgsConstructor
@NoArgsConstructor
@DynamoDBTable(tableName = "my-table")
public class Table {
private String id;
private String name;
@DynamoDBHashKey(attributeName = "id")
@DynamoDBAutoGeneratedKey
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@DynamoDBAttribute
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@query >
public Table getByName(String name) {
return dynamoDBMapper.load(Table.class, name);
}
aws dynamodb create-table --endpoint-url=http://localstack:4569 --table-name my-table \
--attribute-definitions AttributeName=id,AttributeType=S AttributeName=name,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH AttributeName=name,KeyType=RANGE \
感谢任何帮助
显然您不能按名称查询 table,因为它不是 partition/hash 键。您可以使用扫描,也可以将 name
声明为 GSI 字段,然后对其进行查询。扫描命令如下:
dynamoDBMapper.scan(Table.class, new DynamoDBScanExpression());
以上命令将扫描整个table。阅读有关 DynamoDBScanExpression here 的信息,了解如何使用特定 name
.
对其进行过滤
您可以像 name
添加过滤器,例如:
public Table getByName(String name) {
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
scanExpression.addFilterCondition("name", new Condition()
.withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue().withS(name)));
dynamoDBMapper.scan(Table.class, scanExpression);
}
我正在使用 loacalstack 和 dynamodb 设置。 Iv a table 有两列,一个 Id 和一个 name 列。我正在努力使用 DynamoDBMapper 通过 'name' 查询 table。下面是我的设置片段
实体>
@AllArgsConstructor
@NoArgsConstructor
@DynamoDBTable(tableName = "my-table")
public class Table {
private String id;
private String name;
@DynamoDBHashKey(attributeName = "id")
@DynamoDBAutoGeneratedKey
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@DynamoDBAttribute
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@query >
public Table getByName(String name) {
return dynamoDBMapper.load(Table.class, name);
}
aws dynamodb create-table --endpoint-url=http://localstack:4569 --table-name my-table \
--attribute-definitions AttributeName=id,AttributeType=S AttributeName=name,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH AttributeName=name,KeyType=RANGE \
感谢任何帮助
显然您不能按名称查询 table,因为它不是 partition/hash 键。您可以使用扫描,也可以将 name
声明为 GSI 字段,然后对其进行查询。扫描命令如下:
dynamoDBMapper.scan(Table.class, new DynamoDBScanExpression());
以上命令将扫描整个table。阅读有关 DynamoDBScanExpression here 的信息,了解如何使用特定 name
.
您可以像 name
添加过滤器,例如:
public Table getByName(String name) {
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
scanExpression.addFilterCondition("name", new Condition()
.withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue().withS(name)));
dynamoDBMapper.scan(Table.class, scanExpression);
}