gpt4 book ai didi

Java DynamoDBMapper。映射属性值 'M'

转载 作者:行者123 更新时间:2023-11-30 10:45:12 26 4
gpt4 key购买 nike

我刚刚开始我的第一个 DynamoDB 项目,我一直在尝试尽可能多地阅读文档。我认为我的项目的最佳可能性是在 SDK 中使用高级 DynamoDbMapper 以允许 CRUD 操作。

在 DynamoDB 文档中有一种属性值 'M' 可以在这里看到 http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_AttributeValue.html

在较低级别的 java API 中,例如 getItem 或 getItemBatch,此值类型转换为 java.util.map<>。

但我似乎找不到任何资源表明我可以使用 HigherLevel DBMapper 来使用此数据类型。此处支持的数据类型。 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.DataTypes.html

我注意到在页面底部,它提供了一些创建您自己的更高级别映射系统的见解。但我想我会先在这里问,然后再深入研究代码进行尝试。所以我想我的问题是...是否可以使用 DynamoDBMapper 来处理 Java.Util.Map 数据类型?

我在谷歌上唯一能找到的见解是这个奇怪的 github 错误,用户似乎在做我想做的事情。 https://github.com/aws/aws-sdk-java/issues/520

希望这是有道理的。拉尔夫

最佳答案

更新:注意到您需要将 Java.Util.Map 属性映射到 DynamoDB 映射属性,所以下面的所有内容都不能回答您的问题,抱歉。在我的例子中,使用了自定义类的属性,而不是 Java.Util.Map 类的属性。


假设您的表名为“my_table”,并假设以下是记录的 json 转储:

{
uuid: "52f9d257-7998-4379-928b-9d41d70dd8a8",
my_map: {
field1: 123,
field2: 456
}
}

(这里my_map是想要的'M'类型的字段)

要将 DynamoDBMapper 用于此类表,您需要创建两个带注释的类,第一个用于表本身:

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;

@DynamoDBTable(tableName="my_table")
public class MyClass {
private String uuid;
private MyMapClass myMap;

@DynamoDBHashKey(attributeName="uuid")
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}

@DynamoDBAttribute(attributeName = "my_map")
public MyMapClass getMyMap() {
return myMap;
}
public void setMyMap(MyMapClass myMap) {
this.myMap = myMap;
}
}

第二个——用于 my_map 字段:

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBDocument;


@DynamoDBDocument
public class MyMapClass {
private int field1;
private int field2;

@DynamoDBAttribute(attributeName = "field1")
public int getField1() {
return field1;
}
public void setField1(int field1) {
this.field1 = field1;
}

@DynamoDBAttribute(attributeName = "field2")
public int getField2() {
return field2;
}
public void setField2(int field2) {
this.field2 = field2;
}
}

这是一个用法示例:

...
DynamoDBMapper dbMapper = new DynamoDBMapper(dbClient);
...
MyClass item = new MyClass();
item.setUuid("52f9d257-7998-4379-928b-9d41d70dd8a8");
MyMapClass map = new MyMapClass();
map.setField1(123);
map.setField2(456);
item.setMyMap(map);
dbMapper.save(item);

希望这对您有所帮助!

关于Java DynamoDBMapper。映射属性值 'M',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37125863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com