

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Überblick über die AWS SDK-Unterstützung für DynamoDB
<a name="Programming.SDKOverview"></a>

Das folgende Diagramm bietet einen allgemeinen Überblick über die Amazon DynamoDB DynamoDB-Anwendungsprogrammierung mit dem. AWS SDKs

![\[Programmiermodell für die Verwendung von DynamoDB mit. AWS SDKs\]](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/SDKSupport.png)


1. Sie schreiben eine Anwendung mit einem AWS SDK für Ihre Programmiersprache.

1. Jedes AWS SDK bietet eine oder mehrere programmatische Schnittstellen für die Arbeit mit DynamoDB. Welche spezifischen Schnittstellen verfügbar sind, hängt davon ab, welche Programmiersprache und welches AWS SDK Sie verwenden. Zu den Optionen gehören:
   + [Low-Level-Schnittstellen, die mit DynamoDB funktionieren](Programming.SDKs.Interfaces.md#Programming.SDKs.Interfaces.LowLevel)
   + [Dokumentschnittstellen, die mit DynamoDB funktionieren](Programming.SDKs.Interfaces.md#Programming.SDKs.Interfaces.Document)
   + [Schnittstellen für Objektpersistenz, die mit DynamoDB funktionieren](Programming.SDKs.Interfaces.md#Programming.SDKs.Interfaces.Mapper)
   + [High-Level-Schnittstellen](HigherLevelInterfaces.md)

1. Das AWS SDK erstellt HTTP (S) -Anfragen zur Verwendung mit der Low-Level-DynamoDB-API.

1. Das AWS SDK sendet die Anfrage an den DynamoDB-Endpunkt.

1. DynamoDB führt die Anforderung aus. Wenn die Anforderung erfolgreich ist, gibt DynamoDB einen HTTP-200-Antwortcode zurück (OK). Wenn die Anforderung fehlschlägt, gibt DynamoDB einen HTTP-Fehlercode und eine Fehlermeldung zurück.

1. Das AWS SDK verarbeitet die Antwort und leitet sie zurück an Ihre Anwendung.

Jedes von ihnen AWS SDKs stellt wichtige Dienste für Ihre Anwendung bereit, darunter die folgenden:
+ Formatieren von HTTP(S)-Anforderungen und Serialisieren von Anforderungsparametern
+ Erstellen einer kryptografischen Signatur für jede Anforderung
+ Weiterleiten von Anforderungen an einen DynamoDB-Endpunkt und Empfangen von Antworten von DynamoDB.
+ Extrahieren der Ergebnisse dieser Antworten
+ Implementieren einer grundlegenden Retry-Logik im Falle von Fehlern

Sie müssen für keine dieser Aufgaben einen Code schreiben.

**Anmerkung**  
Weitere Informationen AWS SDKs, einschließlich Installationsanweisungen und Dokumentation, finden Sie unter [Tools for Amazon Web Services](https://aws.amazon.com/tools).

## SDK-Unterstützung für AWS kontobasierte Endgeräte
<a name="Programming.SDKs.endpoints"></a>

AWS führt die SDK-Unterstützung für AWS-account-basierte Endpunkte für DynamoDB ein, beginnend mit dem AWS SDK for Java V1 am 4. September 2024. Diese neuen Endpunkte tragen dazu bei AWS , eine hohe Leistung und Skalierbarkeit sicherzustellen. Die aktualisierte SDKs Version verwendet automatisch die neuen Endpunkte, die das Format haben. `https://(account-id).ddb.(region).amazonaws.com`

Wenn Sie eine einzelne Instance eines SDK-Clients verwenden, um Anfragen an mehrere Konten zu stellen, hat Ihre Anwendung weniger Möglichkeiten, Verbindungen wiederzuverwenden. AWS empfiehlt, Ihre Anwendung so anzupassen, dass pro SDK-Client-Instance weniger Konten angesprochen werden. Eine Alternative besteht darin, Ihren SDK-Client mithilfe dieser `ACCOUNT_ID_ENDPOINT_MODE` Einstellung so einzurichten, dass er weiterhin regionale Endpunkte verwendet, wie im Referenzhandbuch [https://docs.aws.amazon.com/sdkref/latest/guide/feature-account-endpoints.html](https://docs.aws.amazon.com/sdkref/latest/guide/feature-account-endpoints.html) dokumentiert.

# Programmierschnittstellen, die mit DynamoDB funktionieren
<a name="Programming.SDKs.Interfaces"></a>

Jedes [AWS SDK ](https://aws.amazon.com/tools) bietet eine oder mehrere programmgesteuerte Schnittstellen für die Arbeit mit Amazon DynamoDB. Diese Schnittstellen reichen von einfachen Low-Level-DynamoDB-Wrapper zu objektorientierten Persistenzschichten. Die verfügbaren Schnittstellen variieren je nach AWS SDK und verwendeter Programmiersprache.

![\[Programmatische Schnittstellen sind in verschiedenen Ausführungen AWS SDKs für die Arbeit mit DynamoDB verfügbar.\]](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/SDKSupport.SDKInterfaces.png)


Der folgende Abschnitt hebt einige der verfügbaren Schnittstellen hervor und verwendet AWS SDK für Java als Beispiel. (Nicht alle Schnittstellen sind in allen verfügbar.) AWS SDKs

**Topics**
+ [

## Low-Level-Schnittstellen, die mit DynamoDB funktionieren
](#Programming.SDKs.Interfaces.LowLevel)
+ [

## Dokumentschnittstellen, die mit DynamoDB funktionieren
](#Programming.SDKs.Interfaces.Document)
+ [

## Schnittstellen für Objektpersistenz, die mit DynamoDB funktionieren
](#Programming.SDKs.Interfaces.Mapper)

## Low-Level-Schnittstellen, die mit DynamoDB funktionieren
<a name="Programming.SDKs.Interfaces.LowLevel"></a>

Jedes sprachspezifische AWS SDK bietet eine Low-Level-Schnittstelle für Amazon DynamoDB mit Methoden, die DynamoDB-API-Anfragen auf niedriger Ebene sehr ähnlich sind.

In einigen Fällen müssen Sie die Datentypen der Attribute mithilfe von [Datentypbeschreibungen](Programming.LowLevelAPI.md#Programming.LowLevelAPI.DataTypeDescriptors) identifizieren, so wie `S` für Zeichenfolge und `N` für Zahl.

**Anmerkung**  
Ein Low-Level-Schnittstelle ist in jeder sprachspezifischen AWS -SDK verfügbar.

Das folgende Java-Programm verwendet die Low-Level-Schnittstelle des AWS SDK für Java. 

### Beispiel einer Low-Level-Schnittstelle
<a name="low-level-example"></a>

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.GetItemRequest;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 *
 * To get an item from an Amazon DynamoDB table using the AWS SDK for Java V2,
 * its better practice to use the
 * Enhanced Client, see the EnhancedGetItem example.
 */
public class GetItem {
    public static void main(String[] args) {
        final String usage = """

                Usage:
                    <tableName> <key> <keyVal>

                Where:
                    tableName - The Amazon DynamoDB table from which an item is retrieved (for example, Music3).\s
                    key - The key used in the Amazon DynamoDB table (for example, Artist).\s
                    keyval - The key value that represents the item to get (for example, Famous Band).
                """;

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

        String tableName = args[0];
        String key = args[1];
        String keyVal = args[2];
        System.out.format("Retrieving item \"%s\" from \"%s\"\n", keyVal, tableName);
        Region region = Region.US_EAST_1;
        DynamoDbClient ddb = DynamoDbClient.builder()
                .region(region)
                .build();

        getDynamoDBItem(ddb, tableName, key, keyVal);
        ddb.close();
    }

    public static void getDynamoDBItem(DynamoDbClient ddb, String tableName, String key, String keyVal) {
        HashMap<String, AttributeValue> keyToGet = new HashMap<>();
        keyToGet.put(key, AttributeValue.builder()
                .s(keyVal)
                .build());

        GetItemRequest request = GetItemRequest.builder()
                .key(keyToGet)
                .tableName(tableName)
                .build();

        try {
            // If there is no matching item, GetItem does not return any data.
            Map<String, AttributeValue> returnedItem = ddb.getItem(request).item();
            if (returnedItem.isEmpty())
                System.out.format("No item found with the key %s!\n", key);
            else {
                Set<String> keys = returnedItem.keySet();
                System.out.println("Amazon DynamoDB table attributes: \n");
                for (String key1 : keys) {
                    System.out.format("%s: %s\n", key1, returnedItem.get(key1).toString());
                }
            }

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

## Dokumentschnittstellen, die mit DynamoDB funktionieren
<a name="Programming.SDKs.Interfaces.Document"></a>

Viele AWS SDKs bieten eine Dokumentschnittstelle, über die Sie Operationen auf Datenebene (Erstellen, Lesen, Aktualisieren, Löschen) für Tabellen und Indizes ausführen können. Mit einer Dokumentschnittstelle müssen Sie [Datentypbeschreibungen](Programming.LowLevelAPI.md#Programming.LowLevelAPI.DataTypeDescriptors) nicht angeben. Die Datentypen werden durch die Semantiken der Daten selber bereitgestellt. Diese bieten AWS SDKs auch Methoden zur einfachen Konvertierung von JSON-Dokumenten in und aus nativen Amazon DynamoDB DynamoDB-Datentypen.

**Anmerkung**  
[Dokumentschnittstellen sind im AWS SDKs für [Java](https://aws.amazon.com/sdk-for-java), [.NET](https://aws.amazon.com/sdk-for-net), [Node.js](https://aws.amazon.com/sdk-for-node-js) und JavaScript SDK verfügbar.](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)

Das folgende Java-Programm verwendet die Dokumentschnittstelle des AWS SDK für Java. Das Programm erstellt ein `Table`-Objekt, das die `Music`-Tabelle repräsentiert und fordert dieses Objekt auf, `GetItem` zu verwenden, um einen Song abzurufen. Das Programm gibt dann das Jahr aus, in dem der Song veröffentlicht wurde.

Die `software.amazon.dynamodb.document.DynamoDB`-Klasse implementiert die DynamoDB-Dokumentschnittstelle. Beachten Sie, wie `DynamoDB` als Wrapper um den Low-Level-Client agiert (`AmazonDynamoDB`).

### Beispiel für eine Dokumentschnittstelle
<a name="document-level-example"></a>

```
package com.amazonaws.codesamples.gsg;

import software.amazon.dynamodb.AmazonDynamoDB;
import software.amazon.dynamodb.AmazonDynamoDBClientBuilder;
import software.amazon.dynamodb.document.DynamoDB;
import software.amazon.dynamodb.document.GetItemOutcome;
import software.amazon.dynamodb.document.Table;

public class MusicDocumentDemo {

    public static void main(String[] args) {

        AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();
        DynamoDB docClient = new DynamoDB(client);

        Table table = docClient.getTable("Music");
        GetItemOutcome outcome = table.getItemOutcome(
                "Artist", "No One You Know",
                "SongTitle", "Call Me Today");

        int year = outcome.getItem().getInt("Year");
        System.out.println("The song was released in " + year);

    }
}
```

## Schnittstellen für Objektpersistenz, die mit DynamoDB funktionieren
<a name="Programming.SDKs.Interfaces.Mapper"></a>

Einige AWS SDKs bieten eine Schnittstelle zur Objektpersistenz, über die Sie keine direkten Operationen auf der Datenebene ausführen können. Stattdessen erstellen Sie Objekte, die Elemente in Amazon-DynamoDB-Tabellen und Indexe repräsentieren, und interagieren ausschließlich mit diesen Objekten. Auf diese Weise können Sie objektorientierte Codes statt datenbankorientierter Codes schreiben.

**Anmerkung**  
Schnittstellen AWS SDKs für Objektpersistenz sind in Java und .NET verfügbar. Weitere Informationen finden Sie unter [Higher-Level-Programmierschnittstellen für DynamoDB](HigherLevelInterfaces.md) für DynamoDB.

### Beispiel einer Objektpersistenzschnittstelle
<a name="mapper-level-example"></a>

```
import com.example.dynamodb.Customer;
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.TableSchema;
import software.amazon.awssdk.enhanced.dynamodb.model.GetItemEnhancedRequest;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
```

```
import com.example.dynamodb.Customer;
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.TableSchema;
import software.amazon.awssdk.enhanced.dynamodb.model.GetItemEnhancedRequest;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;

/*
 * Before running this code example, create an Amazon DynamoDB table named Customer with these columns:
 *   - id - the id of the record that is the key. Be sure one of the id values is `id101`
 *   - custName - the customer name
 *   - email - the email value
 *   - registrationDate - an instant value when the item was added to the table. These values
 *                        need to be in the form of `YYYY-MM-DDTHH:mm:ssZ`, such as 2022-07-11T00:00:00Z
 *
 * Also, ensure that you have set up your development environment, including your credentials.
 *
 * For information, see this documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */

public class EnhancedGetItem {
    public static void main(String[] args) {
        Region region = Region.US_EAST_1;
        DynamoDbClient ddb = DynamoDbClient.builder()
                .region(region)
                .build();

        DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder()
                .dynamoDbClient(ddb)
                .build();

        getItem(enhancedClient);
        ddb.close();
    }

    public static String getItem(DynamoDbEnhancedClient enhancedClient) {
        Customer result = null;
        try {
            DynamoDbTable<Customer> table = enhancedClient.table("Customer", TableSchema.fromBean(Customer.class));
            Key key = Key.builder()
                    .partitionValue("id101").sortValue("tred@noserver.com")
                    .build();

            // Get the item by using the key.
            result = table.getItem(
                    (GetItemEnhancedRequest.Builder requestBuilder) -> requestBuilder.key(key));
            System.out.println("******* The description value is " + result.getCustName());

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

# Higher-Level-Programmierschnittstellen für DynamoDB
<a name="HigherLevelInterfaces"></a>

 AWS SDKs Sie bieten Anwendungen mit Low-Level-Schnittstellen für die Arbeit mit Amazon DynamoDB. Diese clientseitigen Klassen und Methoden entsprechen direkt der Low-Level-API von DynamoDB API. Doch viele Entwickler stellen *Impedanzfehlanpassungen* fest, wenn sie Elementen in einer Datenbanktabelle komplexe Datentypen zuordnen müssen. Mit einer Low-Level-Datenbankschnittstelle müssen Entwickler Methoden zum Lesen oder Schreiben von Objektdaten in Datenbanktabellen und umgekehrt entwickeln. Die Menge des zusätzlich erforderlichen Codes für jede Kombination aus Objekttyp und Datenbanktabelle kann überwältigend erscheinen.

Um die Entwicklung zu vereinfachen, bieten die AWS SDKs für Java und .NET zusätzliche Schnittstellen mit höheren Abstraktionsebenen. Mit den High-Level-Schnittstellen für DynamoDB-Objekte können Sie die Beziehungen zwischen Objekten in Ihrem Programm und den Datenbanktabellen definieren, die die Daten dieser Objekte speichern. Nachdem Sie diese Mappings definiert haben, rufen Sie einfache Objektmethoden wie `save`, `load` oder `delete` auf. Die zugrunde liegenden DynamoDB-Low-Level-Operationen werden dann in Ihrem Namen automatisch aufgerufen. Auf diese Weise können Sie objektorientierte Codes statt datenbankorientierter Codes schreiben.

Die übergeordneten Programmierschnittstellen für DynamoDB sind in den Versionen AWS SDKs für Java und .NET verfügbar.

**Java**
+ [Java 1.x: Dynamo DBMapper](DynamoDBMapper.md)
+ [Java 2.x: Erweiterter DynamoDB-Client](DynamoDBEnhanced.md)

**.NET**
+ [Arbeiten dem .NET-Dokumentmodell in DynamoDB](DotNetSDKMidLevel.md)
+ [Arbeiten mit dem Object Persistence-Modell von .NET und DynamoDB](DotNetSDKHighLevel.md)

# Java 1.x: Dynamo DBMapper
<a name="DynamoDBMapper"></a>

**Anmerkung**  
Das SDK für Java ist in zwei Versionen verfügbar: 1.x und 2.x. Die Version end-of-support für 1.x wurde [am 12. Januar 2024 angekündigt](https://aws.amazon.com/blogs/developer/announcing-end-of-support-for-aws-sdk-for-java-v1-x-on-december-31-2025/). Es wird und end-of-support ist am 31. Dezember 2025 fällig. Für Neuentwicklungen wird die Verwendung von Version 2.x empfohlen.

Die AWS SDK für Java stellt eine `DynamoDBMapper` Klasse bereit, mit der Sie Ihre clientseitigen Klassen Amazon DynamoDB-Tabellen zuordnen können. Um `DynamoDBMapper` zu verwenden, definieren Sie die Beziehung zwischen Elementen in einer DynamoDB-Tabelle und ihren entsprechenden Objekt-Instances im Code. Die `DynamoDBMapper`-Klasse ermöglicht Ihnen auch die Ausführung verschiedener Create-, Read-, Update-, und Delete-Operationen (CRUD) für Elemente sowie das Ausführen von Abfragen und Scans für Tabellen.

**Topics**
+ [

# Dynamo-Klasse DBMapper
](DynamoDBMapper.Methods.md)
+ [

# Unterstützte Datentypen für Dynamo DBMapper für Java
](DynamoDBMapper.DataTypes.md)
+ [

# Java-Anmerkungen für DynamoDB
](DynamoDBMapper.Annotations.md)
+ [

# Optionale Konfigurationseinstellungen für Dynamo DBMapper
](DynamoDBMapper.OptionalConfig.md)
+ [

# DynamoDB und optimistische Sperren mit Versionsnummer
](DynamoDBMapper.OptimisticLocking.md)
+ [

# Zuordnen willkürlicher Daten in DynamoDB
](DynamoDBMapper.ArbitraryDataMapping.md)
+ [

# Beispiele für DynamoDBMapper
](DynamoDBMapper.Examples.md)

**Anmerkung**  
Die `DynamoDBMapper`-Klasse erlaubt kein Erstellen, Aktualisieren oder Löschen von Tabellen. Zum Ausführen dieser Aufgaben verwenden Sie stattdessen die Low-Level-SDK-für-Java-Schnittstelle. 

Das SDK für Java stellt eine Reihe von Anmerkungstypen bereit, damit Sie Ihre Klassen zu Tabellen zuweisen können. Betrachten Sie beispielsweise eine `ProductCatalog`-Tabelle, die `Id` als Partitionsschlüssel verwendet. 

```
ProductCatalog(Id, ...)
```

Sie können der `ProductCatalog`-Tabelle eine Klasse in Ihrer Client-Anwendung zuweisen wie im folgenden Java-Code gezeigt. Diese Code definiert ein Plain Old Java Object (POJO) mit dem Namen `CatalogItem`, das Anmerkungen verwendet, um Objektfelder zu DynamoDB-Attributnamen zuzuweisen:

**Example**  

```
package com.amazonaws.codesamples;

import java.util.Set;

import software.amazon.dynamodb.datamodeling.DynamoDBAttribute;
import software.amazon.dynamodb.datamodeling.DynamoDBHashKey;
import software.amazon.dynamodb.datamodeling.DynamoDBIgnore;
import software.amazon.dynamodb.datamodeling.DynamoDBTable;

@DynamoDBTable(tableName="ProductCatalog")
public class CatalogItem {

    private Integer id;
    private String title;
    private String ISBN;
    private Set<String> bookAuthors;
    private String someProp;

    @DynamoDBHashKey(attributeName="Id")
    public Integer getId() { return id; }
    public void setId(Integer id) {this.id = id; }

    @DynamoDBAttribute(attributeName="Title")
    public String getTitle() {return title; }
    public void setTitle(String title) { this.title = title; }

    @DynamoDBAttribute(attributeName="ISBN")
    public String getISBN() { return ISBN; }
    public void setISBN(String ISBN) { this.ISBN = ISBN; }

    @DynamoDBAttribute(attributeName="Authors")
    public Set<String> getBookAuthors() { return bookAuthors; }
    public void setBookAuthors(Set<String> bookAuthors) { this.bookAuthors = bookAuthors; }

    @DynamoDBIgnore
    public String getSomeProp() { return someProp; }
    public void setSomeProp(String someProp) { this.someProp = someProp; }
}
```

Im vorherigen Code weist die Anmerkung `@DynamoDBTable` die Klasse `CatalogItem` der Tabelle `ProductCatalog` zu. Sie können einzelne Klassen-Instances als Elemente in der Tabelle speichern. Die Anmerkung `@DynamoDBHashKey` weist die Eigenschaft `Id` dem Primärschlüssel zu. 

Standardmäßig sind die Klasseneigenschaften denselben Attributnamen in der Tabelle zugeordnet. Die Eigenschaften `Title` und `ISBN` sind den gleichen Attributnamen in der Tabelle zugeordnet. 

Die `@DynamoDBAttribute`-Anmerkung ist optional, wenn der Name des DynamoDB-Attributs dem Namen der in der Klasse angegebenen Eigenschaft entspricht. Wenn sich die Namen unterscheiden, verwenden Sie diese Anmerkung mit dem Parameter `attributeName`, um anzugeben, mit welchem DynamoDB-Attribut diese Eigenschaft übereinstimmt. 

Im vorangegangenen Beispiel wird jeder Eigenschaft die Annotation `@DynamoDBAttribute` hinzugefügt, um sicherzustellen, dass Eigenschaftsnamen genau den Tabellen entsprechen, die in einem vorherigen Schritt erstellt wurden und um die Attributnamen, die in anderen Codebeispielen in diesem Handbuch verwendet werden, einzuhalten. 

Ihre Klassendefinition kann Eigenschaften besitzen, die keinen Attributen in der Tabelle zugeordnet sind. Sie erkennen diese Eigenschaften, indem Sie die `@DynamoDBIgnore`-Anmerkung hinzufügen. Im vorangegangenen Beispiel ist die `SomeProp`-Eigenschaft mit der `@DynamoDBIgnore`-Anmerkung gekennzeichnet. Wenn Sie eine `CatalogItem`-Instance in die Tabelle hochladen, enthält Ihre `DynamoDBMapper`-Instance die Eigenschaft `SomeProp` nicht. Darüber hinaus gibt der Mapper dieses Attribut nicht zurück, wenn Sie ein Element aus der Tabelle abrufen. 

Nachdem Sie die Mappingklasse definierthaben, können Sie `DynamoDBMapper`-Methoden verwenden, um eine Instance dieser Klasse zu einem entsprechenden Element in der Tabelle `Catalog` zu schreiben. Das folgende Codebeispiel zeigt diese Technik.

```
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();

DynamoDBMapper mapper = new DynamoDBMapper(client);

CatalogItem item = new CatalogItem();
item.setId(102);
item.setTitle("Book 102 Title");
item.setISBN("222-2222222222");
item.setBookAuthors(new HashSet<String>(Arrays.asList("Author 1", "Author 2")));
item.setSomeProp("Test");

mapper.save(item);
```

Im folgenden Codebeispiel wird gezeigt, wie Sie das Element abrufen und auf einige seiner Attribute zugreifen.

```
CatalogItem partitionKey = new CatalogItem();

partitionKey.setId(102);
DynamoDBQueryExpression<CatalogItem> queryExpression = new DynamoDBQueryExpression<CatalogItem>()
    .withHashKeyValues(partitionKey);

List<CatalogItem> itemList = mapper.query(CatalogItem.class, queryExpression);

for (int i = 0; i < itemList.size(); i++) {
    System.out.println(itemList.get(i).getTitle());
    System.out.println(itemList.get(i).getBookAuthors());
}
```

`DynamoDBMapper` ermöglicht ein intuitives und natürliches Arbeiten mit DynamoDB-Daten in Java. Er bietet auch verschiedene integrierte Funktionen wie optimistische Sperre, ACID-Transaktionen, automatisch generierte Partitions- und Sortierschlüsselwerte sowie Objektversionierung.

# Dynamo-Klasse DBMapper
<a name="DynamoDBMapper.Methods"></a>



Die Klasse A`DynamoDBMapper` ist der Eintrittspunkt für Amazon DynamoDB. Sie stellt Zugriff auf einen DynamoDB-Endpunkt bereit und ermöglicht Ihnen, auf Ihre Daten in verschiedenen Tabellen zuzugreifen. Sie ermöglicht Ihnen auch die Ausführung verschiedener Create-, Read-, Update-, und Delete-Operationen (CRUD) für Elemente sowie das Ausführen von Abfragen und Scans auf Tabellen. Diese Klasse bietet die folgenden Methoden für die Arbeit mit DynamoDB.

*Die entsprechende Javadoc-Dokumentation finden Sie unter [Dynamo DBMapper](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html) in der API-Referenz.AWS SDK für Java *

**Topics**
+ [

## save
](#DynamoDBMapper.Methods.save)
+ [

## load
](#DynamoDBMapper.Methods.load)
+ [

## delete
](#DynamoDBMapper.Methods.delete)
+ [

## query
](#DynamoDBMapper.Methods.query)
+ [

## queryPage
](#DynamoDBMapper.Methods.queryPage)
+ [

## scan
](#DynamoDBMapper.Methods.scan)
+ [

## scanPage
](#DynamoDBMapper.Methods.scanPage)
+ [

## parallelScan
](#DynamoDBMapper.Methods.parallelScan)
+ [

## batchSave
](#DynamoDBMapper.Methods.batchSave)
+ [

## batchLoad
](#DynamoDBMapper.Methods.batchLoad)
+ [

## batchDelete
](#DynamoDBMapper.Methods.batchDelete)
+ [

## batchWrite
](#DynamoDBMapper.Methods.batchWrite)
+ [

## transactionWrite
](#DynamoDBMapper.Methods.transactionWrite)
+ [

## transactionLoad
](#DynamoDBMapper.Methods.transactionLoad)
+ [

## count
](#DynamoDBMapper.Methods.count)
+ [

## generateCreateTableAnfrage
](#DynamoDBMapper.Methods.generateCreateTableRequest)
+ [

## createS3Link
](#DynamoDBMapper.Methods.createS3Link)
+ [

## GetS3 ClientCache
](#DynamoDBMapper.Methods.getS3ClientCache)

## save
<a name="DynamoDBMapper.Methods.save"></a>

Speichert das angegebene Objekt in der Tabelle. Das Objekt, das Sie speichern möchten, ist der einzige erforderliche Parameter für diese Methode. Sie können optionale Konfigurationsparameter mithilfe des `DynamoDBMapperConfig`-Objekts bereitstellen. 

Wenn ein Element mit demselben Primärschlüssel nicht vorhanden ist, erstellt diese Methode ein neues Element in der Tabelle. Wenn ein Element mit demselben Primärschlüssel vorhanden ist, aktualisiert sie das vorhandene Element. Wenn der Partitions- und Sortierschlüssel den Typ String haben und mit `@DynamoDBAutoGeneratedKey` angemerkt sind, erhalten sie einen Random Universally Unique Identifier (UUID), wenn sie nicht initialisiert werden. Versionsfelder, die mit `@DynamoDBVersionAttribute` angemerkt sind, werden um eins erhöht. Wenn ein Versionsfeld aktualisiert oder ein Schlüssel generiert wird, wird das übergebene Objekt als Folge der Operation aktualisiert. 

Standardmäßig werden nur Attribute aktualisiert, die Eigenschaften der zugewiesenen Klasse entsprechen. Zusätzlich für ein Element vorhandene Attribute sind nicht betroffen. Wenn Sie jedoch `SaveBehavior.CLOBBER` angeben, können Sie die vollständige Überschreibung des Elements erzwingen.

```
DynamoDBMapperConfig config = DynamoDBMapperConfig.builder()
    .withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.CLOBBER).build();
        
mapper.save(item, config);
```

Wenn Versioning aktiviert ist, müssen die client- und serverseitigen Elementversionen übereinstimmen. Jedoch muss die Version nicht übereinstimmen, wenn die Option `SaveBehavior.CLOBBER` verwendet wird. Weitere Informationen über das Versioning finden Sie unter [DynamoDB und optimistische Sperren mit Versionsnummer](DynamoDBMapper.OptimisticLocking.md).

## load
<a name="DynamoDBMapper.Methods.load"></a>

Ruft ein Element aus einer Tabelle ab. Sie müssen den Primärschlüssel des Elements bereitstellen, das Sie abrufen möchten. Sie können optionale Konfigurationsparameter mithilfe des `DynamoDBMapperConfig`-Objekts bereitstellen. Beispielsweise können Sie optional Strongly Consistent-Lesevorgänge anfordern, um sicherzustellen, dass diese Methode ausschließlich die neuesten Elementwerte, wie in der folgenden Java-Anweisung dargestellt, bereitstellt. 

```
DynamoDBMapperConfig config = DynamoDBMapperConfig.builder()
    .withConsistentReads(DynamoDBMapperConfig.ConsistentReads.CONSISTENT).build();

CatalogItem item = mapper.load(CatalogItem.class, item.getId(), config);
```

Standardmäßig gibt DynamoDB das Element zurück, das über Eventually-Consistent-Werte verfügt. Weitere Informationen über das Eventual-Consistency-Modell von DynamoDB finden Sie unter [DynamoDB-Lesekonsistenz](HowItWorks.ReadConsistency.md).

## delete
<a name="DynamoDBMapper.Methods.delete"></a>

Löscht ein Element aus der Tabelle. Sie müssen eine Objekt-Instance aus der zugeordneten Klasse übergeben. 

Wenn Versioning aktiviert ist, müssen die client- und serverseitigen Elementversionen übereinstimmen. Jedoch muss die Version nicht übereinstimmen, wenn die Option `SaveBehavior.CLOBBER` verwendet wird. Weitere Informationen zum Versioning finden Sie unter [DynamoDB und optimistische Sperren mit Versionsnummer](DynamoDBMapper.OptimisticLocking.md). 

## query
<a name="DynamoDBMapper.Methods.query"></a>

Fragt eine Tabelle oder einen sekundären Index ab.

Angenommen, Sie verfügen über die Tabelle `Reply`, die Antworten für Forum-Threads speichert. Jedes Thread-Thema kann null oder mehr Antworten enthalten. Der Primärschlüssel der Tabelle `Reply` besteht aus den Feldern `Id` und `ReplyDateTime`, wobei `Id` der Partitionsschlüssel und `ReplyDateTime` der Sortierschlüssel des Primärschlüssels ist.

```
Reply ( Id, ReplyDateTime, ... )
```

Angenommen, Sie haben eine Mapping zwischen der Klasse `Reply` und der entsprechenden Tabelle `Reply` in DynamoDB erstellt. Der folgende Java-Code verwendet `DynamoDBMapper`, um alle Antworten der letzten zwei Wochen zu einem bestimmten Thread-Thema zu finden.

**Example**  

```
String forumName = "&DDB;";
String forumSubject = "&DDB; Thread 1";
String partitionKey = forumName + "#" + forumSubject;

long twoWeeksAgoMilli = (new Date()).getTime() - (14L*24L*60L*60L*1000L);
Date twoWeeksAgo = new Date();
twoWeeksAgo.setTime(twoWeeksAgoMilli);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String twoWeeksAgoStr = df.format(twoWeeksAgo);

Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
eav.put(":v1", new AttributeValue().withS(partitionKey));
eav.put(":v2",new AttributeValue().withS(twoWeeksAgoStr.toString()));

DynamoDBQueryExpression<Reply> queryExpression = new DynamoDBQueryExpression<Reply>()
    .withKeyConditionExpression("Id = :v1 and ReplyDateTime > :v2")
    .withExpressionAttributeValues(eav);

List<Reply> latestReplies = mapper.query(Reply.class, queryExpression);
```

Die Abfrage gibt eine Sammlung von `Reply`-Objekten zurück. 

Die `query`-Methode gibt standardmäßig eine "lazy-loaded"-Sammlung zurück. Sie gibt anfänglich ausschließlich eine Ergebnisseite zurück und führt dann bei Bedarf einen Dienstaufruf für die nächste Seite durch. Um alle übereinstimmenden Elemente zu erhalten, müssen Sie die Sammlung `latestReplies` durchlaufen. 

Beachten Sie, dass beim Aufrufen der `size()`-Methode für die Sammlung jedes Ergebnis geladen wird, um eine genaue Zählung zu liefern. Dies kann dazu führen, dass viel bereitgestellter Durchsatz verbraucht wird, und bei einer sehr großen Tabelle könnte sogar der gesamte Speicher in Ihrer JVM ausgeschöpft werden.

Für eine Indexabfrage müssen Sie zuerst den Index als eine Mapper-Klasse modellieren. *Angenommen, die `Reply` Tabelle hat einen globalen sekundären Index namens -Message-Index. PostedBy* Der Partitionsschlüssel für diesen Index ist `PostedBy` und der Sortierschlüssel ist `Message`. Die Klassendefinition für ein Element im Index würde wie folgt aussehen.

```
@DynamoDBTable(tableName="Reply")
public class PostedByMessage {
    private String postedBy;
    private String message;

    @DynamoDBIndexHashKey(globalSecondaryIndexName = "PostedBy-Message-Index", attributeName = "PostedBy")
    public String getPostedBy() { return postedBy; }
    public void setPostedBy(String postedBy) { this.postedBy = postedBy; }

    @DynamoDBIndexRangeKey(globalSecondaryIndexName = "PostedBy-Message-Index", attributeName = "Message")
    public String getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }

   // Additional properties go here.
}
```

Die Anmerkung `@DynamoDBTable` gibt an, dass dieser Index mit der Tabelle `Reply` verknüpft ist. Die `@DynamoDBIndexHashKey` Anmerkung bezeichnet den Partitionsschlüssel (*PostedBy*) des Indexes und `@DynamoDBIndexRangeKey` den Sortierschlüssel (*Message*) des Indexes.

Sie können jetzt `DynamoDBMapper` nutzen, um den Index abzufragen, der eine Teilmenge der Nachrichten, die von einem bestimmten Benutzer gepostet wurden, abruft. Sie müssen den Indexnamen nicht angeben, wenn Sie keine widersprüchlichen Zuordnungen zwischen Tabellen und Indizes haben und die Zuordnungen bereits im Mapper vorgenommen wurden. Der Mapper leitet anhand des Primärschlüssels und des Sortierschlüssels ab. Der folgende Code fragt den globalen sekundären Index ab. Da globale sekundäre Indizes Eventually Consistent-Lesevorgänge, jedoch keine Strongly Consistent-Lesevorgänge unterstützen, müssen Sie `withConsistentRead(false)` angeben.

```
HashMap<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
eav.put(":v1",  new AttributeValue().withS("User A"));
eav.put(":v2",  new AttributeValue().withS("DynamoDB"));

DynamoDBQueryExpression<PostedByMessage> queryExpression = new DynamoDBQueryExpression<PostedByMessage>()
    .withIndexName("PostedBy-Message-Index")
    .withConsistentRead(false)
    .withKeyConditionExpression("PostedBy = :v1 and begins_with(Message, :v2)")
    .withExpressionAttributeValues(eav);

List<PostedByMessage> iList =  mapper.query(PostedByMessage.class, queryExpression);
```

Die Abfrage gibt eine Sammlung von `PostedByMessage`-Objekten zurück.

## queryPage
<a name="DynamoDBMapper.Methods.queryPage"></a>

Fragt eine Tabelle oder einen sekundären Index ab und gibt eine einzelne Seite der übereinstimmenden Ergebnisse zurück. Ebenso wie bei der `query`-Methode, müssen Sie einen Partitions-Schlüsselwert und einen Abfragefilter angeben, der auf das Sortierschlüsselattribut angewendet wird. `queryPage` gibt jedoch ausschließlich die erste „Seite“ der Daten zurück, d. h. Menge von Daten, die in 1 MB passt. 

## scan
<a name="DynamoDBMapper.Methods.scan"></a>

Scannt eine gesamte Tabelle oder einen sekundären Index. Sie können optional einen `FilterExpression` angeben, um den Ergebnissatz zu filtern.

Angenommen, Sie verfügen über die Tabelle `Reply`, die Antworten für Forum-Threads speichert. Jedes Thread-Thema kann null oder mehr Antworten enthalten. Der Primärschlüssel der Tabelle `Reply` besteht aus den Feldern `Id` und `ReplyDateTime`, wobei `Id` der Partitionsschlüssel und `ReplyDateTime` der Sortierschlüssel des Primärschlüssels ist.

```
Reply ( Id, ReplyDateTime, ... )
```

Wenn Sie der Tabelle `Reply` eine Java-Klasse zugewiesen haben, können Sie `DynamoDBMapper` verwenden, um die Tabelle zu scannen. Der folgende Java-Code scannt beispielsweise die gesamte Tabelle `Reply` und gibt nur die Antworten für ein bestimmtes Jahr zurück.

**Example**  

```
HashMap<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
eav.put(":v1", new AttributeValue().withS("2015"));

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression()
    .withFilterExpression("begins_with(ReplyDateTime,:v1)")
    .withExpressionAttributeValues(eav);

List<Reply> replies =  mapper.scan(Reply.class, scanExpression);
```

Die `scan`-Methode gibt standardmäßig eine "lazy-loaded"-Sammlung zurück. Sie gibt anfänglich ausschließlich eine Ergebnisseite zurück und führt dann bei Bedarf einen Dienstaufruf für die nächste Seite durch. Um alle übereinstimmenden Elemente zu erhalten, müssen Sie die Sammlung `replies` durchlaufen.

Beachten Sie, dass beim Aufrufen der `size()`-Methode für die Sammlung jedes Ergebnis geladen wird, um eine genaue Zählung zu liefern. Dies kann dazu führen, dass viel bereitgestellter Durchsatz verbraucht wird, und bei einer sehr großen Tabelle könnte sogar der gesamte Speicher in Ihrer JVM ausgeschöpft werden.

Um einen Index zu scannen, müssen Sie zuerst den Index als eine Mapper-Klasse modellieren. Angenommen, die `Reply`-Tabelle hat einen globalen sekundären Index namens `PostedBy-Message-Index`. Der Partitionsschlüssel für diesen Index ist `PostedBy` und der Sortierschlüssel ist `Message`. Im Abschnitt [query](#DynamoDBMapper.Methods.query) wird eine Mapper-Klasse für diesen Index gezeigt. Sie verwendet die Anmerkungen `@DynamoDBIndexHashKey` und `@DynamoDBIndexRangeKey`, um den Partitions- und Sortierschlüssel des Index anzugeben.

Im folgenden Codebeispiel wird `PostedBy-Message-Index` gescannt. Er verwendet keinen Scan-Filter, sodass alle Elemente im Index an Sie zurückgegeben werden.

```
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression()
    .withIndexName("PostedBy-Message-Index")
    .withConsistentRead(false);

    List<PostedByMessage> iList =  mapper.scan(PostedByMessage.class, scanExpression);
    Iterator<PostedByMessage> indexItems = iList.iterator();
```

## scanPage
<a name="DynamoDBMapper.Methods.scanPage"></a>

Scannt eine Tabelle oder einen sekundären Index und gibt eine einzelne Seite der übereinstimmenden Ergebnisse zurück. Ebenso wie bei der `scan`-Methode, können Sie optional einen `FilterExpression` festlegen, um den Ergebnissatz zu filtern. `scanPage` gibt jedoch nur die erste „Seite“ der Daten zurück, d. h. Menge von Daten, die in 1 MB passt.

## parallelScan
<a name="DynamoDBMapper.Methods.parallelScan"></a>

Führt einen parallelen Scan einer gesamten Tabelle oder einem sekundären Index durch. Sie geben eine Reihe von logischen Segmente für die Tabelle zusammen mit einem Scan-Ausdruck an, um Ergebnisse zu filtern. Der `parallelScan` teilt die Scan-Aufgabe unter mehreren Benutzern auf, einer für jedes logische Segment; die Benutzer verarbeiten die Daten parallel und geben die Ergebnisse zurück.

Im folgenden Java-Codebeispiel wird ein paralleler Scan der Tabelle `Product` ausgeführt.

```
int numberOfThreads = 4;

Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
eav.put(":n", new AttributeValue().withN("100"));

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression()
    .withFilterExpression("Price <= :n")
    .withExpressionAttributeValues(eav);

List<Product> scanResult = mapper.parallelScan(Product.class, scanExpression, numberOfThreads);
```

## batchSave
<a name="DynamoDBMapper.Methods.batchSave"></a>

Speichert Objekte in eine oder mehrere Tabellen mithilfe eines Aufrufs oder mehrerer Aufrufe der Methode `AmazonDynamoDB.batchWriteItem`. Diese Methode bietet keine Transaktionsgarantien.

Der folgende Java-Code speichert zwei Elemente (Bücher) in der Tabelle `ProductCatalog`.

```
Book book1 = new Book();
book1.setId(901);
book1.setProductCategory("Book");
book1.setTitle("Book 901 Title");

Book book2 = new Book();
book2.setId(902);
book2.setProductCategory("Book");
book2.setTitle("Book 902 Title");

mapper.batchSave(Arrays.asList(book1, book2));
```

## batchLoad
<a name="DynamoDBMapper.Methods.batchLoad"></a>

Ruft mehrere Elemente aus einer oder mehreren Tabellen anhand ihrer Primärschlüssel ab.

Der folgende Java-Code ruft zwei Elemente aus zwei verschiedenen Tabellen ab.

```
ArrayList<Object> itemsToGet = new ArrayList<Object>();

ForumItem forumItem = new ForumItem();
forumItem.setForumName("Amazon DynamoDB");
itemsToGet.add(forumItem);

ThreadItem threadItem = new ThreadItem();
threadItem.setForumName("Amazon DynamoDB");
threadItem.setSubject("Amazon DynamoDB thread 1 message text");
itemsToGet.add(threadItem);

Map<String, List<Object>> items = mapper.batchLoad(itemsToGet);
```

## batchDelete
<a name="DynamoDBMapper.Methods.batchDelete"></a>

Löscht Objekte aus einer oder mehreren Tabellen mithilfe einer oder mehrerer Aufrufe der `AmazonDynamoDB.batchWriteItem`-Methode. Diese Methode bietet keine Transaktionsgarantien. 

Der folgende Java-Code löscht zwei Elemente (Bücher) aus der Tabelle `ProductCatalog`.

```
Book book1 = mapper.load(Book.class, 901);
Book book2 = mapper.load(Book.class, 902);
mapper.batchDelete(Arrays.asList(book1, book2));
```

## batchWrite
<a name="DynamoDBMapper.Methods.batchWrite"></a>

Speichert Objekte in und löscht Objekte aus einer oder mehreren Tabellen mithilfe einer oder mehrerer Aufrufe der `AmazonDynamoDB.batchWriteItem`-Methode. Diese Methode bietet keine Transaktionsgarantien oder Versioning-Support (bedingte Ablege- oder Löschvorgänge).

Der folgende Java-Code schreibt ein neues Element in die Tabelle `Forum`, schreibt ein neues Element in die Tabelle `Thread` und löscht ein Element aus der Tabelle `ProductCatalog`.

```
// Create a Forum item to save
Forum forumItem = new Forum();
forumItem.setName("Test BatchWrite Forum");

// Create a Thread item to save
Thread threadItem = new Thread();
threadItem.setForumName("AmazonDynamoDB");
threadItem.setSubject("My sample question");

// Load a ProductCatalog item to delete
Book book3 = mapper.load(Book.class, 903);

List<Object> objectsToWrite = Arrays.asList(forumItem, threadItem);
List<Book> objectsToDelete = Arrays.asList(book3);

mapper.batchWrite(objectsToWrite, objectsToDelete);
```

## transactionWrite
<a name="DynamoDBMapper.Methods.transactionWrite"></a>

Speichert Objekte in und löscht Objekte aus mindestens einer Tabelle mithilfe eines Aufrufs der `AmazonDynamoDB.transactWriteItems`-Methode. 

[Eine Liste der transaktionsspezifischen Ausnahmen finden Sie unter Fehler. TransactWriteItems ](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html#API_TransactWriteItems_Errors) 

Weitere Informationen zu DynamoDB-Transaktionen und den bereitgestellten Garantien für Atomizität, Konsistenz, Isolation und Beständigkeit (Atomicity, Consistency, Isolation, Durability – ACID) finden Sie unter [Amazon DynamoDB Transactions](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transactions.html). 

**Anmerkung**  
 Diese Methode unterstützt Folgendes nicht:  
[DBMapperDynamo-Konfiguration. SaveBehavior](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptionalConfig.html).

Der folgende Java-Code schreibt transaktional jeweils ein neues Element in die Tabellen `Forum` und `Thread`.

```
Thread s3ForumThread = new Thread();
s3ForumThread.setForumName("S3 Forum");
s3ForumThread.setSubject("Sample Subject 1");
s3ForumThread.setMessage("Sample Question 1");

Forum s3Forum = new Forum();
s3Forum.setName("S3 Forum");
s3Forum.setCategory("Amazon Web Services");
s3Forum.setThreads(1);

TransactionWriteRequest transactionWriteRequest = new TransactionWriteRequest();
transactionWriteRequest.addPut(s3Forum);
transactionWriteRequest.addPut(s3ForumThread);
mapper.transactionWrite(transactionWriteRequest);
```

## transactionLoad
<a name="DynamoDBMapper.Methods.transactionLoad"></a>

Lädt Objekte aus mindestens einer Tabelle mithilfe eines Aufrufs der `AmazonDynamoDB.transactGetItems`-Methode. 

[Eine Liste der transaktionsspezifischen Ausnahmen finden Sie unter Fehler. TransactGetItems ](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactGetItems.html#API_TransactGetItems_Errors) 

Weitere Informationen zu DynamoDB-Transaktionen und den bereitgestellten Garantien für Atomizität, Konsistenz, Isolation und Beständigkeit (Atomicity, Consistency, Isolation, Durability – ACID) finden Sie unter [Amazon DynamoDB Transactions](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transactions.html). 

Der folgende Java-Code lädt transaktional jeweils ein Element aus den Tabellen `Forum` und `Thread`.

```
Forum dynamodbForum = new Forum();
dynamodbForum.setName("DynamoDB Forum");
Thread dynamodbForumThread = new Thread();
dynamodbForumThread.setForumName("DynamoDB Forum");

TransactionLoadRequest transactionLoadRequest = new TransactionLoadRequest();
transactionLoadRequest.addLoad(dynamodbForum);
transactionLoadRequest.addLoad(dynamodbForumThread);
mapper.transactionLoad(transactionLoadRequest);
```

## count
<a name="DynamoDBMapper.Methods.count"></a>

Bewertet den angegebenen Scanausdruck und gibt die Anzahl der übereinstimmenden Elemente zurück. Es werden keine Elementdaten zurückgegeben.

## generateCreateTableAnfrage
<a name="DynamoDBMapper.Methods.generateCreateTableRequest"></a>

Analysiert eine POJO-Klasse, die eine DynamoDB-Tabelle repräsentiert und gibt eine `CreateTableRequest` für diese Tabelle zurück.

## createS3Link
<a name="DynamoDBMapper.Methods.createS3Link"></a>

Erstellt einen Link zu einem Objekt in Amazon S3. Sie müssen einen Bucket-Namen und einen Schlüsselnamen angeben, welches das Objekt in dem Bucket eindeutig identifiziert.

Um `createS3Link` zu verwenden, muss die Mapper-Klasse die Methoden "Getter" und "Setter" definieren. Das folgende Codebeispiel veranschaulicht dies, indem der `CatalogItem` Klasse ein neues Attribut und neue getter/setter Methoden hinzugefügt werden.

```
@DynamoDBTable(tableName="ProductCatalog")
public class CatalogItem {

    ...

    public S3Link productImage;

    ....

    @DynamoDBAttribute(attributeName = "ProductImage")
    public S3Link getProductImage() {
            return productImage;
    }

    public void setProductImage(S3Link productImage) {
        this.productImage = productImage;
    }

...
}
```

Der folgende Java-Code definiert ein neues Element, das in die Tabelle `Product` geschrieben werden soll. Das Element enthält einen Link zu einemr Produktimage. Die Imagedaten werden auf Amazon S3 hochgeladen.

```
CatalogItem item = new CatalogItem();

item.setId(150);
item.setTitle("Book 150 Title");

String amzn-s3-demo-bucket = "amzn-s3-demo-bucket";
String myS3Key = "productImages/book_150_cover.jpg";
item.setProductImage(mapper.createS3Link(amzn-s3-demo-bucket, myS3Key));

item.getProductImage().uploadFrom(new File("/file/path/book_150_cover.jpg"));

mapper.save(item);
```

Die `S3Link`-Klasse bietet viele andere Methoden für die Bearbeitung von Objekten in Amazon S3. Weitere Informationen finden Sie unter [Javadocs for `S3Link`](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/S3Link.html).

## GetS3 ClientCache
<a name="DynamoDBMapper.Methods.getS3ClientCache"></a>

Gibt den zugrunde liegenden `S3ClientCache` für den Zugriff auf Amazon S3 zurück. Ein `S3ClientCache` ist ein intelligentes Mapping für `AmazonS3Client`-Objekte. Wenn Sie mehrere Kunden haben, `S3ClientCache` kann Ihnen an dabei helfen, die Kunden nach AWS Regionen zu organisieren und bei Bedarf neue Amazon S3 S3-Clients zu erstellen.

# Unterstützte Datentypen für Dynamo DBMapper für Java
<a name="DynamoDBMapper.DataTypes"></a>

Dieser Abschnitt beschreibt die unterstützten primitiven Java-Datentypen, Sammlungen und beliebige Datentypen in Amazon DynamoDB. 

Amazon DynamoDB unterstützt folgenden primitiven Java-Datentypen und primitiven Wrapperklassen. 
+ `String`
+ `Boolean`, `boolean`
+ `Byte`, `byte`
+ `Date` (als [ISO\$18601](http://en.wikipedia.org/wiki/ISO_8601) Millisekunden-Präzisionszeichenfolge, verschoben nach UTC)
+ `Calendar` (als [ISO\$18601](http://en.wikipedia.org/wiki/ISO_8601) Millisekunden-Präzisionszeichenfolge, verschoben nach UTC)
+ `Long`, `long`
+ `Integer`, `int`
+ `Double`, `double`
+ `Float`, `float`
+ `BigDecimal`
+ `BigInteger`

**Anmerkung**  
Weitere Informationen zu DynamoDB-Benennungsregeln und den verschiedenen unterstützten Datentypen finden sie unter [Unterstützte Datentypen und Benennungsregeln in Amazon DynamoDB](HowItWorks.NamingRulesDataTypes.md). 
Leere Binärwerte werden von Dynamo DBMapper unterstützt.
Leere Zeichenfolgenwerte werden unterstützt von AWS SDK for Java 2.x.  
In AWS SDK for Java 1.x DBMapper unterstützt Dynamo das Lesen leerer String-Attributwerte, schreibt jedoch keine leeren String-Attributwerte, da diese Attribute aus der Anforderung gelöscht werden.

DynamoDB unterstützt die Java-Sammlungstypen [Set](http://docs.oracle.com/javase/6/docs/api/java/util/Set.html), [List](http://docs.oracle.com/javase/6/docs/api/java/util/List.html) und [Map](http://docs.oracle.com/javase/6/docs/api/java/util/Map.html). Die folgende Tabelle fasst zusammen, wie diese Java-Typen den DynamoDB-Typen zugewiesen werden.


****  

| Java-Typ | DynamoDB-Typ | 
| --- | --- | 
|  Alle Zahlentypen  |  `N` (Zahlentyp)  | 
|  Zeichenfolgen  |  `S` (Zeichenfolgetyp)   | 
|  Boolesch  |  `BOOL` (Boolescher Typ), 0 oder 1.  | 
|  ByteBuffer  |  `B` (Binärtyp)  | 
|  Date  |  `S` (Zeichenfolgetyp). Die Datumswerte werden als ISO-8601-formatierte Zeichenfolge gespeichert.  | 
| [Set](http://docs.oracle.com/javase/6/docs/api/java/util/Set.html)-Sammlungstypen |  `SS` (Zeichenfolgesatz)-Typ, `NS` (Zahlensatz)-Typ oder `BS` (Binärsatz)-Typ.  | 

 Die `DynamoDBTypeConverter`-Schnittstelle ermöglicht das Mapping eigener beliebiger Datentypen zu einem Datentyp, der von DynamoDB nativ unterstützt wird. Weitere Informationen finden Sie unter [Zuordnen willkürlicher Daten in DynamoDB](DynamoDBMapper.ArbitraryDataMapping.md). 

# Java-Anmerkungen für DynamoDB
<a name="DynamoDBMapper.Annotations"></a>

Dieser Abschnitt beschreibt die Anmerkungen, die für das Mapping Ihrer Klassen und Eigenschaften zu Tabellen und Attributen in Amazon DynamoDB verfügbar sind.

Die entsprechende Javadoc-Dokumentation finden Sie unter [Annotation Types Summary](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/package-summary.html) in der [AWS SDK für Java API-Referenz](https://docs.aws.amazon.com/sdk-for-java/latest/reference/).

**Anmerkung**  
In den folgenden Anmerkungen sind ausschließlich `DynamoDBTable` und der `DynamoDBHashKey` erforderlich. 

**Topics**
+ [

## Dynamo DBAttribute
](#DynamoDBMapper.Annotations.DynamoDBAttribute)
+ [

## Dynamo DBAuto GeneratedKey
](#DynamoDBMapper.Annotations.DynamoDBAutoGeneratedKey)
+ [

## Dynamo DBAuto GeneratedTimestamp
](#DynamoDBMapper.Annotations.DynamoDBAutoGeneratedTimestamp)
+ [

## Dynamo DBDocument
](#DynamoDBMapper.Annotations.DynamoDBDocument)
+ [

## Dynamo-Schlüssel DBHash
](#DynamoDBMapper.Annotations.DynamoDBHashKey)
+ [

## Dynamo DBIgnore
](#DynamoDBMapper.Annotations.DynamoDBIgnore)
+ [

## Dynamo DBIndex HashKey
](#DynamoDBMapper.Annotations.DynamoDBIndexHashKey)
+ [

## Dynamo DBIndex RangeKey
](#DynamoDBMapper.Annotations.DynamoDBIndexRangeKey)
+ [

## Dynamo-Schlüssel DBRange
](#DynamoDBMapper.Annotations.DynamoDBRangeKey)
+ [

## Dynamo DBTable
](#DynamoDBMapper.Annotations.DynamoDBTable)
+ [

## Dynamo wurde konvertiert DBType
](#DynamoDBMapper.Annotations.DynamoDBTypeConverted)
+ [

## Dynamo DBTyped
](#DynamoDBMapper.Annotations.DynamoDBTyped)
+ [

## Dynamo-Attribut DBVersion
](#DynamoDBMapper.Annotations.DynamoDBVersionAttribute)

## Dynamo DBAttribute
<a name="DynamoDBMapper.Annotations.DynamoDBAttribute"></a>

Ordnet eine Eigenschaft einem Tabellenattribut zu. Standardmäßig wird jede Klasseneigenschaft einem Elementattribut mit demselben Namen zugeordnet. Wenn die Namen jedoch nicht identisch sind, können Sie diese Anmerkung verwenden, um dem Attribut eine Eigenschaft zuzuordnen. Im folgenden Java-Ausschnitt ordnet `DynamoDBAttribute` die `BookAuthors`-Eigenschaft dem `Authors`-Attributnamen in der Tabelle zu.

```
@DynamoDBAttribute(attributeName = "Authors")
public List<String> getBookAuthors() { return BookAuthors; }
public void setBookAuthors(List<String> BookAuthors) { this.BookAuthors = BookAuthors; }
```

Der `DynamoDBMapper` verwendet `Authors` als Attributnamen bei der Speicherung des Objekts in die Tabelle. 

## Dynamo DBAuto GeneratedKey
<a name="DynamoDBMapper.Annotations.DynamoDBAutoGeneratedKey"></a>

Kennzeichnet eine Partitions- oder Sortierschlüsseleigenschaft als automatisch generiert. `DynamoDBMapper` generiert beim Speichern dieser Attribute nach dem Zufallsprinzip eine [UUID](http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html). Ausschließlich Zeichenfolgeeigenschaften können als automatisch generierte Schlüssel markiert werden. 

Das folgende Beispiel zeigt die Verwendung von automatisch generierten Schlüsseln.

```
@DynamoDBTable(tableName="AutoGeneratedKeysExample")
public class AutoGeneratedKeys {
    private String id;
    private String payload;

    @DynamoDBHashKey(attributeName = "Id")
    @DynamoDBAutoGeneratedKey
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }

    @DynamoDBAttribute(attributeName="payload")
    public String getPayload() { return this.payload; }
    public void setPayload(String payload) { this.payload = payload; }

    public static void saveItem() {
        AutoGeneratedKeys obj = new AutoGeneratedKeys();
        obj.setPayload("abc123");

        // id field is null at this point
        DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient);
        mapper.save(obj);

        System.out.println("Object was saved with id " + obj.getId());
    }
}
```

## Dynamo DBAuto GeneratedTimestamp
<a name="DynamoDBMapper.Annotations.DynamoDBAutoGeneratedTimestamp"></a>

Generiert automatisch einen Zeitstempel.

```
@DynamoDBAutoGeneratedTimestamp(strategy=DynamoDBAutoGenerateStrategy.ALWAYS)
public Date getLastUpdatedDate() { return lastUpdatedDate; }
public void setLastUpdatedDate(Date lastUpdatedDate) { this.lastUpdatedDate = lastUpdatedDate; }
```

Optional kann die Strategie für die automatische Generierung durch Angabe eines Strategieattributs definiert werden. Der Standardwert ist `ALWAYS`.

## Dynamo DBDocument
<a name="DynamoDBMapper.Annotations.DynamoDBDocument"></a>

Gibt an, dass eine Klasse als Amazon-DynamoDB-Dokument serialisiert werden kann.

Angenommen, Sie möchten ein JSON-Dokument einem DynamoDB-Attribut des Typs „Map“ zuweisen (`M`). Im folgenden Codebeispiel wird ein Element definiert, das ein verschachteltes Attribut (Bilder) des Typs „Map“ enthält.

```
public class ProductCatalogItem {

    private Integer id;  //partition key
    private Pictures pictures;
    /* ...other attributes omitted... */

    @DynamoDBHashKey(attributeName="Id")
    public Integer getId() { return id;}
    public void setId(Integer id) {this.id = id;}

    @DynamoDBAttribute(attributeName="Pictures")
    public Pictures getPictures() { return pictures;}
    public void setPictures(Pictures pictures) {this.pictures = pictures;}

    // Additional properties go here.

    @DynamoDBDocument
    public static class Pictures {
        private String frontView;
        private String rearView;
        private String sideView;

        @DynamoDBAttribute(attributeName = "FrontView")
        public String getFrontView() { return frontView; }
        public void setFrontView(String frontView) { this.frontView = frontView; }

        @DynamoDBAttribute(attributeName = "RearView")
        public String getRearView() { return rearView; }
        public void setRearView(String rearView) { this.rearView = rearView; }

        @DynamoDBAttribute(attributeName = "SideView")
        public String getSideView() { return sideView; }
        public void setSideView(String sideView) { this.sideView = sideView; }

     }
}
```

Anschließend könnten Sie ein neues `ProductCatalog`-Element mit `Pictures` speichern wie im folgenden Beispiel gezeigt.

```
ProductCatalogItem item = new ProductCatalogItem();

Pictures pix = new Pictures();
pix.setFrontView("http://example.com/products/123_front.jpg");
pix.setRearView("http://example.com/products/123_rear.jpg");
pix.setSideView("http://example.com/products/123_left_side.jpg");
item.setPictures(pix);

item.setId(123);

mapper.save(item);
```

Das resultierende `ProductCatalog`-Element würde wie folgt aussehen (im JSON-Format).

```
{
  "Id" : 123
  "Pictures" : {
    "SideView" : "http://example.com/products/123_left_side.jpg",
    "RearView" : "http://example.com/products/123_rear.jpg",
    "FrontView" : "http://example.com/products/123_front.jpg"
  }
}
```

## Dynamo-Schlüssel DBHash
<a name="DynamoDBMapper.Annotations.DynamoDBHashKey"></a>

Ordnet eine Klasseneigenschaft dem Partitionsschlüssel der Tabelle zu. Die Eigenschaft muss ein skalarer Zeichenfolge-, Zahlen- oder Binärtyp sein. Die Eigenschaft darf kein Sammlungstyp sein. 

Angenommen, Sie besitzen eine Tabelle `ProductCatalog`, die `Id` als Primärschlüssel verwendet. Der folgende Java-Code definiert eine `CatalogItem`-Klasse und ordnet ihre Eigenschaft `Id` dem Primärschlüssel der Tabelle `ProductCatalog` mithilfe des Tags `@DynamoDBHashKey` zu.

```
@DynamoDBTable(tableName="ProductCatalog")
public class CatalogItem {
    private Integer Id;
   @DynamoDBHashKey(attributeName="Id")
   public Integer getId() {
        return Id;
   }
   public void setId(Integer Id) {
        this.Id = Id;
   }
   // Additional properties go here.
}
```

## Dynamo DBIgnore
<a name="DynamoDBMapper.Annotations.DynamoDBIgnore"></a>

Zeigt der `DynamoDBMapper`-Instance an, dass die zugeordnete Eigenschaft ignoriert werden sollte. Beim Speichern der Daten in die Tabelle, speichert der `DynamoDBMapper` diese Eigenschaft nicht in die Tabelle.

 Wird auf die Getter-Methode oder das Klassenfeld für eine nicht modellierte Eigenschaft angewendet. Wenn die Anmerkung direkt auf das Klassenfeld angewendet wird, müssen die entsprechenden Getter- und Setter-Methoden in derselben Klasse deklariert werden. 

## Dynamo DBIndex HashKey
<a name="DynamoDBMapper.Annotations.DynamoDBIndexHashKey"></a>

Ordnet eine Klasseneigenschaft dem Partitionsschlüssel eines globalen sekundären Index zu. Die Eigenschaft muss ein skalarer Zeichenfolge-, Zahlen- oder Binärtyp sein. Die Eigenschaft darf kein Sammlungstyp sein. 

Verwenden Sie diese Anmerkung, wenn Sie `Query` einen globalen sekundären Index brauchen. Sie müssen den Indexnamen angeben (`globalSecondaryIndexName`). Wenn sich der Name der Klasseneigenschaft vom Indexpartitionsschlüssel unterscheidet, müssen Sie auch den Namen dieses Indexattributs (`attributeName`).

## Dynamo DBIndex RangeKey
<a name="DynamoDBMapper.Annotations.DynamoDBIndexRangeKey"></a>

Ordnet eine Klasseneigenschaft dem Sortierschlüssel eines globalen sekundären Index oder eines lokalen sekundären Index zu. Die Eigenschaft muss ein skalarer Zeichenfolge-, Zahlen- oder Binärtyp sein. Die Eigenschaft darf kein Sammlungstyp sein. 

Verwenden Sie diese Anmerkung, wenn Sie `Query` für einen lokalen sekundären Index oder einen globalen sekundären Index ausführen müssen und die Ergebnisse mithilfe des Index-Sortierschlüssels verfeinern möchten. Sie müssen den Indexnamen angeben (entweder `globalSecondaryIndexName` oder `localSecondaryIndexName`). Wenn der Name der Klasseneigenschaft sich von dem Indexsortierschlüssel unterscheidet, müssen Sie auch den Namen dieses Indexattributs (`attributeName`).

## Dynamo-Schlüssel DBRange
<a name="DynamoDBMapper.Annotations.DynamoDBRangeKey"></a>

Ordnet eine Klasseneigenschaft dem Sortierschlüssel der Tabelle zu. Die Eigenschaft muss ein skalarer Zeichenfolge-, Zahlen- oder Binärtyp sein. Sie darf kein Sammlungstyp sein. 

Wenn der Primärschlüssel zusammengesetzt ist (Partitionsschlüssel und Sortierschlüssel), können Sie diesen Tag verwenden, um Ihr Klassenfeld dem Sortierschlüssel zuzuordnen. Angenommen, Sie verfügen über eine Tabelle `Reply`, die Antworten für Forum-Threads speichert. Jeder Thread kann zahlreiche Antworten enthalten. Daher ist der Primärschlüssel dieser Tabelle sowohl die `ThreadId` als auch `ReplyDateTime`. Die `ThreadId` ist der Partitionsschlüssel und `ReplyDateTime` ist der Sortierschlüssel. 

Der folgende Java-Code definiert die Klasse `Reply` und ordnet sie der Tabelle `Reply` zu. Es werden die `@DynamoDBHashKey` und `@DynamoDBRangeKey`-Tags für die Identifizierung der Klasseneigenschaften, die dem Primärschlüssel zugeordnet werden, verwendet.

```
@DynamoDBTable(tableName="Reply")
public class Reply {
    private Integer id;
    private String replyDateTime;

    @DynamoDBHashKey(attributeName="Id")
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }

    @DynamoDBRangeKey(attributeName="ReplyDateTime")
    public String getReplyDateTime() { return replyDateTime; }
    public void setReplyDateTime(String replyDateTime) { this.replyDateTime = replyDateTime; }

   // Additional properties go here.
}
```

## Dynamo DBTable
<a name="DynamoDBMapper.Annotations.DynamoDBTable"></a>

Identifiziert die Zieltabelle in DynamoDB. Der folgende Java-Code definiert beispielsweise die Klasse `Developer` und ordnet sie der `People`-Tabelle in DynamoDB zu. 

```
@DynamoDBTable(tableName="People")
public class Developer { ...}
```

Die `@DynamoDBTable`-Anmerkung kann geerbt werden. Jede neue Klasse, die von der Klasse `Developer` erbt, wird ebenfalls der Tabelle `People` zugeordnet. Angenommen, Sie erstellen beispielsweise eine `Lead` -Klasse, die von der `Developer`-Klasse erbt. Da Sie die Klasse `Developer` der Tabelle `People` zugeordnet haben, werden die Objekte der Klasse `Lead` ebenfalls in dieser Tabelle gespeichert.

Die `@DynamoDBTable` kann auch außer Kraft gesetzt werden. Jede neue Klasse, die standardmäßig von der Klasse `Developer` erbt, wird dieser Tabelle `People` zugeordnet. Sie können jedoch dieses Standardmapping außer Kraft setzen. Wenn Sie beispielsweise eine Klasse erstellen, die von der Klasse `Developer` erbt, können Sie sie ausdrücklich einer anderen Tabelle zuweisen, indem Sie die Anmerkung `@DynamoDBTable` hinzufügen wie im folgenden Java-Codebeispiel gezeigt.

```
@DynamoDBTable(tableName="Managers")
public class Manager extends Developer { ...}
```

## Dynamo wurde konvertiert DBType
<a name="DynamoDBMapper.Annotations.DynamoDBTypeConverted"></a>

Eine Anmerkung, die angibt, dass eine Eigenschaft einen benutzerdefinierten Typkonverter verwendet. Kann in einer benutzerdefinierten Anmerkung mit Anmerkungen versehen werden, um dem `DynamoDBTypeConverter` zusätzliche Eigenschaften zu übergeben. 

 Die `DynamoDBTypeConverter`-Schnittstelle ermöglicht das Mapping eigener beliebiger Datentypen zu einem Datentyp, der von DynamoDB nativ unterstützt wird. Weitere Informationen finden Sie unter [Zuordnen willkürlicher Daten in DynamoDB](DynamoDBMapper.ArbitraryDataMapping.md).

## Dynamo DBTyped
<a name="DynamoDBMapper.Annotations.DynamoDBTyped"></a>

Eine Anmerkung, mit der die standardmäßige Attributtypbindung überschrieben wird. Standard-Typen erfordern die Anmerkung nicht, wenn Sie die Standard-Attributbindung für diesen Typ anwenden. 

## Dynamo-Attribut DBVersion
<a name="DynamoDBMapper.Annotations.DynamoDBVersionAttribute"></a>

Identifiziert eine Klasseneigenschaft für das Speichern einer Versionsnummer der optimistischen Sperre. `DynamoDBMapper` weist dieser Eigenschaft eine Versionsnummer zu, wenn ein neues Element gespeichert wird, und erhöht sie bei jeder Aktualisierung des Elements. Ausschließlich Zahlentypen und skalare Typen werden unterstützt. Weitere Informationen zu Datentypen finden Sie unter [Datentypen](HowItWorks.NamingRulesDataTypes.md#HowItWorks.DataTypes). Weitere Informationen über das Versioning finden Sie unter [DynamoDB und optimistische Sperren mit Versionsnummer](DynamoDBMapper.OptimisticLocking.md).

# Optionale Konfigurationseinstellungen für Dynamo DBMapper
<a name="DynamoDBMapper.OptionalConfig"></a>

Wenn Sie eine Instance von `DynamoDBMapper` erstellen, verfügt sie über bestimmte Standardverhaltensweisen. Sie können diese Standards überschreiben, indem Sie die `DynamoDBMapperConfig`-Klasse verwenden. 

Der folgende Codeausschnitt erstellt einen `DynamoDBMapper` mit benutzerdefinierten Einstellungen:

```
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();

DynamoDBMapperConfig mapperConfig = DynamoDBMapperConfig.builder()
        .withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.CLOBBER)
        .withConsistentReads(DynamoDBMapperConfig.ConsistentReads.CONSISTENT)
        .withTableNameOverride(null)
        .withPaginationLoadingStrategy(DynamoDBMapperConfig.PaginationLoadingStrategy.EAGER_LOADING)
    .build();

DynamoDBMapper mapper = new DynamoDBMapper(client, mapperConfig);
```

Weitere Informationen finden Sie unter [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapperConfig.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapperConfig.html) in der [AWS SDK für Java API-Referenz.](https://docs.aws.amazon.com/sdk-for-java/latest/reference/)

Sie können folgende Argumente für die Instance von `DynamoDBMapperConfig` verwenden:
+ Einen `DynamoDBMapperConfig.ConsistentReads`-Aufzählungswert:
  + `EVENTUAL` – die Mapper-Instance verwendet eine Eventually Consistent-Anforderung.
  + `CONSISTENT` – die Mapper-Instance verwendet eine Strongly-Consistent-Leseanforderung. Sie können diese optionale Einstellung mit der `load`-, `query`- oder `scan`-Operation verwenden. Strongly-Consistent-Lesevorgänge haben Auswirkungen auf Leistung und Fakturierung. Weitere Informationen finden Sie auf der DynamoDB-[Produktdetailseite](https://aws.amazon.com/dynamodb).

  Wenn Sie keine Lesekonsistenzeinstellung für die Mapper-Instance festgelegt haben, ist der Standard `EVENTUAL`.
**Anmerkung**  
Dieser Wert wird bei den `batch load` Operationen`query`, `querypage``load`, und von Dynamo DBMapper angewendet.
+ Ein `DynamoDBMapperConfig.PaginationLoadingStrategy`-Aufzählungswert – kontrolliert wie die Mapper-Instance eine paginierte Datenliste, z. B. ein `query`- oder `scan`-Ergebnis, verarbeitet:
  + `LAZY_LOADING` – Die Mapper-Instance lädt wenn möglich Daten und belässt alle geladenen Ergebnisse im Speicher.
  + `EAGER_LOADING` – die Mapper-Instance lädt die Daten, sobald die Liste initialisiert wird.
  + `ITERATION_ONLY` – Sie können nur einen Iterator nutzen, um aus der Liste zu lesen. Während der Iteration wird die Liste alle vorherigen Ergebnisse löschen, bevor die nächste Seite geladen wird, sodass die Liste höchstens eine Seite der geladenen Ergebnisse im Speicher hält. Dies bedeutet auch, dass die Liste nur einmal iteriert werden kann. Diese Strategie wird bei der Bearbeitung von großen Elementen empfohlen, um den Speichermehraufwand zu reduzieren.

  Wenn Sie keine Paginierungsladestrategie für die Mapper-Instance angeben, ist der Standard `LAZY_LOADING`.
+ Ein `DynamoDBMapperConfig.SaveBehavior`-Aufzählungswert – gibt an wie die Mapper-Instance während Speichervorgängen mit den Attributen umgehen sollte:
  + `UPDATE` – während eines Speichervorgangs werden alle modellierten Attribute aktualisiert, nicht modellierte Attribute bleiben davon unberührt. Primitive Zahlentypen (Byte, int, long) werden auf 0 gesetzt. Objekttypen werden auf Null gesetzt. 
  + `CLOBBER` – löscht und ersetzt alle Attribute während eines Speichervorgangs, nicht modellierte Attribute eingeschlossen. Dies erfolgt durch das Löschen des Elements und seiner Neuerstellung. Versionierte Feldeinschränkungen werden ebenfalls ignoriert.

   Wenn Sie die Speicherverhaltensweise der Mapper-Instance nicht festlegen, ist der Standard `UPDATE`.
**Anmerkung**  
DBMapper Dynamo-Transaktionsoperationen unterstützen keine Aufzählung. `DynamoDBMapperConfig.SaveBehavior` 
+ Ein `DynamoDBMapperConfig.TableNameOverride`-Objekt – weist die Mapper-Instance an, den Tabellennamen, der durch die `DynamoDBTable`-Anmerkung einer Klasse festgelegt wurde, zu ignorieren und stattdessen einen anderen Tabellennamen zu verwenden, den Sie festlegen. Dies ist beim Partitionieren der Daten in mehrere Tabellen zur Laufzeit nützlich. 

Sie können das Standardkonfigurationsobjekt für `DynamoDBMapper` pro Operation falls nötig überschreiben.

# DynamoDB und optimistische Sperren mit Versionsnummer
<a name="DynamoDBMapper.OptimisticLocking"></a>

*Optimistische Sperren* stellen eine Strategie dar, die sicherstellt, dass das clientseitige Element, das Sie aktualisieren (oder löschen), das gleiche Element wie in Amazon DynamoDB ist. Wenn Sie diese Strategie verwenden, werden Ihre Datenbankschreibvorgänge vor dem Überschreiben durch Schreibvorgänge anderer Benutzer geschützt und umgekehrt.

Mit der optimistischen Sperre verfügt jedes Element über ein Attribut, das als Versionsnummer fungiert. Wenn Sie ein Element in einer Tabelle abrufen, zeichnet die Anwendung die Versionsnummer dieses Elements auf. Sie können das Element aktualisieren, jedoch nur, wenn die serverseitige Versionsnummer nicht geändert wurde. Wenn Versionen nicht übereinstimmen, bedeutet das, dass ein anderer Benutzer das Element vor Ihnen geändert hat. Die Aktualisierung schlägt fehlt, da Sie eine veraltete Version des Elements besitzen. Wenn dies der Fall ist, wiederholen Sie den Vorgang, indem Sie das Element abrufen und anschließend versuchen, es zu aktualisieren. Die optimistische Sperre hindert Sie daran, versehentlich Änderungen anderer Benutzer zu überschreiben. Sie hindert auch andere Benutzer daran, versehentlich Ihre Änderungen zu überschreiben.

Sie können zwar Ihre eigene optimistische Sperrstrategie implementieren, stellt jedoch die AWS SDK für Java Anmerkung bereit. `@DynamoDBVersionAttribute` In der Mappingklasse für Ihre Tabelle legen Sie eine Eigenschaft zum Speichern der Versionsnummer fest und kennzeichnen diese mithilfe dieser Anmerkung. Wenn Sie ein Objekt speichern, wird das entsprechende Element in der DynamoDB-Tabelle über ein Attribut verfügen, das die Versionsnummer speichert. Der `DynamoDBMapper` weist eine Versionsnummer zu, wenn Sie das Element zum ersten Mal speichern und er erhöht automatisch die Versionsnummer bei jeder Aktualisierung des Elements. Die Aktualisierungs- oder Löschanforderungen sind nur erfolgreich, wenn die clientseitige Objektversion der entsprechenden Versionsnummer des Elements in der DynamoDB-Tabelle entspricht.

 `ConditionalCheckFailedException` wird aufgeworfen, wenn: 
+  Sie eine optimistische Sperre mit `@DynamoDBVersionAttribute` verwenden und sich der Versionswert auf dem Server von dem Wert auf der Client-Seite unterscheidet. 
+  Sie Ihre eigenen bedingten Einschränkungen beim Speichern der Daten angeben, indem Sie `DynamoDBMapper` mit `DynamoDBSaveExpression` verwenden, und diese Einschränkungen fehlgeschlagen sind. 

**Anmerkung**  
Globale Tabellen in DynamoDB verwenden bei gleichzeitigen Updates einen Mechanismus, bei dem der letzte Schreibvorgang gültig ist. Bei Verwendung von globalen Tabellen ist immer der letzte Schreibvorgang gültig. In diesem Fall funktioniert das Sperren daher nicht wie erwartet.
Transaktionale Schreibvorgänge von `DynamoDBMapper` unterstützen keine `@DynamoDBVersionAttribute`-Anmerkung und -Bedingungsausdrücke auf demselben Objekt. Wenn ein Objekt innerhalb eines transaktionalen Schreibvorgangs mit einer Anmerkung versehen ist `@DynamoDBVersionAttribute` und auch über einen Bedingungsausdruck verfügt, SdkClientException wird ein ausgelöst.

Der folgende Java-Code definiert beispielsweise die Klasse `CatalogItem`, die über mehrere Eigenschaften verfügt. Die `Version`-Eigenschaft wird mit der `@DynamoDBVersionAttribute`-Anmerkung gekennzeichnet.

**Example**  

```
@DynamoDBTable(tableName="ProductCatalog")
public class CatalogItem {

    private Integer id;
    private String title;
    private String ISBN;
    private Set<String> bookAuthors;
    private String someProp;
    private Long version;

    @DynamoDBHashKey(attributeName="Id")
    public Integer getId() { return id; }
    public void setId(Integer Id) { this.id = Id; }

    @DynamoDBAttribute(attributeName="Title")
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }

    @DynamoDBAttribute(attributeName="ISBN")
    public String getISBN() { return ISBN; }
    public void setISBN(String ISBN) { this.ISBN = ISBN;}

    @DynamoDBAttribute(attributeName = "Authors")
    public Set<String> getBookAuthors() { return bookAuthors; }
    public void setBookAuthors(Set<String> bookAuthors) { this.bookAuthors = bookAuthors; }

    @DynamoDBIgnore
    public String getSomeProp() { return someProp;}
    public void setSomeProp(String someProp) {this.someProp = someProp;}

    @DynamoDBVersionAttribute
    public Long getVersion() { return version; }
    public void setVersion(Long version) { this.version = version;}
}
```

Sie können die `@DynamoDBVersionAttribute`-Anmerkung auf löschbare Typen anwenden, die durch primitive Wrapper-Klassen bereitgestellt wurden, die wiederum einen löschbaren Typ wie `Long` und `Integer` bereitstellen. 

Die optimistische Sperre hat folgende Auswirkungen auf diese `DynamoDBMapper`-Methoden:
+ `save` – für ein neues Element weist der `DynamoDBMapper` eine erste Versionsnummer 1 zu. Wenn Sie ein Element abrufen, eine oder mehrere seiner Eigenschaften aktualisieren und versuchen, die Änderungen zu speichern, ist die Speicheroperation nur dann erfolgreich, wenn die clientseitige und die serverseitige Versionsnummer übereinstimmen. Der `DynamoDBMapper` erhöht die Versionsnummer automatisch.
+ `delete` – die `delete`-Methode übernimmt ein Objekt als einen Parameter und der `DynamoDBMapper` führt einen Versionscheck durch, bevor er das Element löscht. Der Versionscheck kann deaktiviert werden, wenn `DynamoDBMapperConfig.SaveBehavior.CLOBBER` in der Anforderung angegeben wird.

  Die interne Implementierung der optimistischen Sperre im `DynamoDBMapper` nutzt die von DynamoDB bereitgestellte Unterstützung für bedingtes Aktualisieren und bedingtes Löschen. 
+ `transactionWrite` —
  + `Put` – für ein neues Element weist der `DynamoDBMapper` eine erste Versionsnummer 1 zu. Wenn Sie ein Element abrufen, eine oder mehrere seiner Eigenschaften aktualisieren und versuchen, die Änderungen zu speichern, ist die Put-Operation nur dann erfolgreich, wenn die clientseitige und die serverseitige Versionsnummer übereinstimmen. Der `DynamoDBMapper` erhöht die Versionsnummer automatisch.
  + `Update` – für ein neues Element weist der `DynamoDBMapper` eine erste Versionsnummer 1 zu. Wenn Sie ein Element abrufen, eine oder mehrere seiner Eigenschaften aktualisieren und versuchen, die Änderungen zu speichern, ist die Update-Operation nur dann erfolgreich, wenn die clientseitige und die serverseitige Versionsnummer übereinstimmen. Der `DynamoDBMapper` erhöht die Versionsnummer automatisch.
  + `Delete` – `DynamoDBMapper` führt eine Versionsprüfung durch, bevor er das Element löscht. Die Lösch-Operation ist nur dann erfolgreich, wenn die Versionsnummern auf Clientseite und auf Serverseite übereinstimmen.
  + `ConditionCheck` – die `@DynamoDBVersionAttribute`-Anmerkung wird für `ConditionCheck`-Operationen nicht unterstützt. Ein SdkClientException wird ausgelöst, wenn ein `ConditionCheck` Element mit einer Anmerkung versehen ist. `@DynamoDBVersionAttribute` 

## Deaktivieren der optimistischen Sperre
<a name="DynamoDBMapper.OptimisticLocking.Disabling"></a>

Um die optimistische Sperre zu deaktivieren, können Sie den `DynamoDBMapperConfig.SaveBehavior`-Aufzählungswert von `UPDATE` auf `CLOBBER` ändern. Sie können dies tun, indem Sie eine `DynamoDBMapperConfig`-Instance erstellen, die eine Versionsüberprüfung überspringt und diese Instance für alle Anforderungen verwendet. Weitere Informationen zu `DynamoDBMapperConfig.SaveBehavior` und anderen optionalen `DynamoDBMapper`-Parametern finden Sie unter [Optionale Konfigurationseinstellungen für Dynamo DBMapper](DynamoDBMapper.OptionalConfig.md). 

Sie können auch ein Sperrverhalten ausschließlich für eine bestimmte Operation festlegen. Der folgende Java-Ausschnitt verwendet beispielsweise den `DynamoDBMapper`, um ein Katalogelement zu speichern. Er legt ein `DynamoDBMapperConfig.SaveBehavior` fest, indem er optionale `DynamoDBMapperConfig`-Parameter der `save`-Methode hinzufügt. 

**Anmerkung**  
Die TransactionWrite-Methode unterstützt Dynamo DBMapper Config nicht. SaveBehaviorKonfiguration. Das Deaktivieren der optimistischen Sperre für transactionWrite wird nicht unterstützt.

**Example**  

```
DynamoDBMapper mapper = new DynamoDBMapper(client);

// Load a catalog item.
CatalogItem item = mapper.load(CatalogItem.class, 101);
item.setTitle("This is a new title for the item");
...
// Save the item.
mapper.save(item,
    new DynamoDBMapperConfig(
        DynamoDBMapperConfig.SaveBehavior.CLOBBER));
```

# Zuordnen willkürlicher Daten in DynamoDB
<a name="DynamoDBMapper.ArbitraryDataMapping"></a>

Zusätzlich zu den unterstützten Java-Typen (siehe [Unterstützte Datentypen für Dynamo DBMapper für Java](DynamoDBMapper.DataTypes.md)) können Sie Typen in der Anwendungen verwenden, für die es keine direkte Mapping zu Amazon-DynamoDB-Typen gibt. Um diese Typen zuzuweisen, müssen Sie eine Implementierung bereitstellen, die Ihren komplexen Typ in einen von DynamoDB unterstützten Typ und umgekehrt konvertiert, und die komplexe Typzugriffsmethode unter Verwendung der Anmerkung `@DynamoDBTypeConverted` kommentieren. Der Konverter-Code wandelt Daten um, wenn Objekte gespeichert oder geladen werden. Er wird außerdem für alle Operationen verwendet, die komplexe Typen nutzen. Beachten Sie, dass beim Vergleichen von Daten während der Abfrage- und Scan-Operationen, die Vergleiche für die in DynamoDB gespeicherten Daten gemacht werden.

Betrachten Sie zum Beispiel die folgende `CatalogItem`-Klasse, die die Eigenschaft `Dimension` mit dem Typ `DimensionType` definiert. Diese Eigenschaft speichert die Elementabmessungen wie Höhe, Breite und Dicke. Gehen Sie davon aus, dass Sie sich dazu entscheiden, diese Elementmaße als Zeichenfolge (z. B. 8,5 x 11 x ,05) in DynamoDB zu speichern. Das folgende Beispiel stellt einen Konverter-Code bereit, der das `DimensionType`-Objekt in eine Zeichenfolge und eine Zeichenfolge in einen `DimensionType` konvertiert.



**Anmerkung**  
In diesem Codebeispiel wird davon ausgegangen, dass Sie bereits Daten für Ihr Konto in DynamoDB geladen haben, indem Sie die Anweisungen im Abschnitt [Erstellen von Tabellen und Laden von Daten für Codebeispiele in DynamoDB](SampleData.md) befolgen.  
 step-by-stepAnweisungen zur Ausführung des folgenden Beispiels finden Sie unter. [Java-Codebeispiele](CodeSamples.Java.md)

**Example**  

```
public class DynamoDBMapperExample {

    static AmazonDynamoDB client;

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

        // Set the AWS region you want to access.
        Regions usWest2 = Regions.US_WEST_2;
        client = AmazonDynamoDBClientBuilder.standard().withRegion(usWest2).build();

        DimensionType dimType = new DimensionType();
        dimType.setHeight("8.00");
        dimType.setLength("11.0");
        dimType.setThickness("1.0");

        Book book = new Book();
        book.setId(502);
        book.setTitle("Book 502");
        book.setISBN("555-5555555555");
        book.setBookAuthors(new HashSet<String>(Arrays.asList("Author1", "Author2")));
        book.setDimensions(dimType);

        DynamoDBMapper mapper = new DynamoDBMapper(client);
        mapper.save(book);

        Book bookRetrieved = mapper.load(Book.class, 502);
        System.out.println("Book info: " + "\n" + bookRetrieved);

        bookRetrieved.getDimensions().setHeight("9.0");
        bookRetrieved.getDimensions().setLength("12.0");
        bookRetrieved.getDimensions().setThickness("2.0");

        mapper.save(bookRetrieved);

        bookRetrieved = mapper.load(Book.class, 502);
        System.out.println("Updated book info: " + "\n" + bookRetrieved);
    }

    @DynamoDBTable(tableName = "ProductCatalog")
    public static class Book {
        private int id;
        private String title;
        private String ISBN;
        private Set<String> bookAuthors;
        private DimensionType dimensionType;

        // Partition key
        @DynamoDBHashKey(attributeName = "Id")
        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        @DynamoDBAttribute(attributeName = "Title")
        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        @DynamoDBAttribute(attributeName = "ISBN")
        public String getISBN() {
            return ISBN;
        }

        public void setISBN(String ISBN) {
            this.ISBN = ISBN;
        }

        @DynamoDBAttribute(attributeName = "Authors")
        public Set<String> getBookAuthors() {
            return bookAuthors;
        }

        public void setBookAuthors(Set<String> bookAuthors) {
            this.bookAuthors = bookAuthors;
        }

        @DynamoDBTypeConverted(converter = DimensionTypeConverter.class)
        @DynamoDBAttribute(attributeName = "Dimensions")
        public DimensionType getDimensions() {
            return dimensionType;
        }

        @DynamoDBAttribute(attributeName = "Dimensions")
        public void setDimensions(DimensionType dimensionType) {
            this.dimensionType = dimensionType;
        }

        @Override
        public String toString() {
            return "Book [ISBN=" + ISBN + ", bookAuthors=" + bookAuthors + ", dimensionType= "
                    + dimensionType.getHeight() + " X " + dimensionType.getLength() + " X "
                    + dimensionType.getThickness()
                    + ", Id=" + id + ", Title=" + title + "]";
        }
    }

    static public class DimensionType {

        private String length;
        private String height;
        private String thickness;

        public String getLength() {
            return length;
        }

        public void setLength(String length) {
            this.length = length;
        }

        public String getHeight() {
            return height;
        }

        public void setHeight(String height) {
            this.height = height;
        }

        public String getThickness() {
            return thickness;
        }

        public void setThickness(String thickness) {
            this.thickness = thickness;
        }
    }

    // Converts the complex type DimensionType to a string and vice-versa.
    static public class DimensionTypeConverter implements DynamoDBTypeConverter<String, DimensionType> {

        @Override
        public String convert(DimensionType object) {
            DimensionType itemDimensions = (DimensionType) object;
            String dimension = null;
            try {
                if (itemDimensions != null) {
                    dimension = String.format("%s x %s x %s", itemDimensions.getLength(), itemDimensions.getHeight(),
                            itemDimensions.getThickness());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return dimension;
        }

        @Override
        public DimensionType unconvert(String s) {

            DimensionType itemDimension = new DimensionType();
            try {
                if (s != null && s.length() != 0) {
                    String[] data = s.split("x");
                    itemDimension.setLength(data[0].trim());
                    itemDimension.setHeight(data[1].trim());
                    itemDimension.setThickness(data[2].trim());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return itemDimension;
        }
    }
}
```

# Beispiele für DynamoDBMapper
<a name="DynamoDBMapper.Examples"></a>

Das AWS-SDK für Java stellt eine `DynamoDBMapper`-Klasse bereit, mit der Sie Ihre clientseitigen Klassen zu Amazon-DynamoDB-Tabellen zuweisen können. Um `DynamoDBMapper` zu verwenden, definieren Sie die Beziehung zwischen Elementen in einer DynamoDB-Tabelle und ihren entsprechenden Objekt-Instances im Code. Die `DynamoDBMapper`-Klasse ermöglicht Ihnen auch die Ausführung verschiedener Create-, Read-, Update-, und Delete-Operationen (CRUD) für Elemente sowie das Ausführen von Abfragen und Scans für Tabellen.

Weitere Informationen für die Verwendung von `DynamoDBMapper` finden Sie unter [DynamoDB-Beispiele für die Verwendung des AWS-SDK für Java](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-dynamodb.html) im *AWS-SDK für Java 1.x-Entwicklerhandbuch*. 

# Java 2.x: Erweiterter DynamoDB-Client
<a name="DynamoDBEnhanced"></a>

Der erweiterte DynamoDB-Client ist eine Bibliothek auf hoher Ebene, die Teil von AWS SDK für Java Version 2 (v2) ist. Er bietet eine einfache Möglichkeit, clientseitige Klassen zu DynamoDB-Tabellen zuzuordnen. Sie definieren die Beziehungen zwischen Tabellen und ihren jeweiligen Modellklassen im Code. Nach der Definition dieser Beziehungen können Sie verschiedene Operationen zum Erstellen, Lesen, Aktualisieren oder Löschen (Create, Read, Update, Delete, CRUD) für Tabellen oder Elemente in DynamoDB auf intuitive Weise ausführen.

Weitere Informationen darüber, wie Sie den erweiterten Client mit DynamoDB verwenden können, finden Sie unter [Verwenden des erweiterten DynamoDB-Clients im AWS SDK für Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/dynamodb-enhanced-client.html). 

# Arbeiten dem .NET-Dokumentmodell in DynamoDB
<a name="DotNetSDKMidLevel"></a>

Das AWS SDK für .NET bietet Dokumentmodellklassen, die einige der Low-Level-Amazon-DynamoDB-Operationen zur weiteren Vereinfachung der Codierung umschließen. Die primären Klassen im Dokumentmodell sind `Table` und `Document`. Die `Table`-Klasse bietet Datenoperationsmethoden wie `PutItem`, `GetItem` und `DeleteItem`. Außerdem stellt sie auch die `Query`- und die `Scan`-Methode bereit. Die `Document`-Klasse steht für ein einzelnes Element in einer Tabelle.

Die zuvor genannten Dokumentmodellklassen sind in dem `Amazon.DynamoDBv2.DocumentModel`-Namespace verfügbar.

**Anmerkung**  
Sie können die Dokumentmodellklassen nicht zum Erstellen, Aktualisieren und Löschen von Tabellen nutzen. Das Dokumentmodell unterstützt jedoch die meisten allgemeinen Datenoperationen.

**Topics**
+ [

## Unterstützte Datentypen
](#MidLevelAPILimitations.SupportedTypes)

## Unterstützte Datentypen
<a name="MidLevelAPILimitations.SupportedTypes"></a>

Das Dokumentmodell unterstützt eine Reihe von primitiven .NET-Datentypen und Sammlungsdatentypen. Das Modell unterstützt die folgenden primitiven Datentypen. 
+ `bool`
+ `byte` 
+ `char`
+ `DateTime`
+ `decimal`
+ `double`
+ `float`
+ `Guid`
+ `Int16`
+ `Int32`
+ `Int64`
+ `SByte`
+ `string`
+ `UInt16`
+ `UInt32`
+ `UInt64`

In der folgenden Tabelle ist das Mapping der vorhergehenden .NET-Typen zu den DynamoDB-Typen zusammengefasst.


****  

| .NET-primitiver Typ | DynamoDB-Typ | 
| --- | --- | 
|  Alle Zahlentypen  |  `N` (Zahlentyp)  | 
|  Alle Zeichenfolgetypen  |  `S` (Zeichenfolgetyp)   | 
|  MemoryStream, Byte []  |  `B` (Binärtyp)   | 
| bool | N (Zahlentyp) 0 repräsentiert False und 1 steht für True. | 
| DateTime | S (Zeichenfolgetyp). Die DateTime-Werte werden als ISO-8601-formatierte Zeichenfolgen gespeichert. | 
| Guid | S (Zeichenfolgetyp). | 
| Sammlungstypen (Liste, HashSet und Array) | BS-(Binärsatz)-Typ, SS-(Zeichenfolgesatz)-Typ und NS-(Zahlensatz)-Typ. | 

AWS SDK für .NET definiert Typen für das Mapping der booleschen, Null-, Listen- und Map-Typen von DynamoDB zur .NET-Dokumentmodell-API:
+ Verwenden Sie als booleschen Typ `DynamoDBBool`.
+ Verwenden Sie als den Null-Typ `DynamoDBNull`.
+ Verwenden Sie als Listentyp `DynamoDBList`.
+ Verwenden Sie als Map-Typ `Document`.

**Anmerkung**  
Leere Binärwerte werden unterstützt.
Das Lesen von leeren Zeichenfolgenwerten wird unterstützt. Leere Zeichenfolgen-Attributwerte werden beim Schreiben zu DynamoDB in Attributwerten vom Typ Zeichenfolgensatz unterstützt. Leere Zeichenfolgen-Attributwerte des Zeichenfolgentyps und leere Zeichenfolgenwerte innerhalb des Listen- oder Map-Typs werden aus Schreibanforderungen gelöscht.

# Arbeiten mit dem Object Persistence-Modell von .NET und DynamoDB
<a name="DotNetSDKHighLevel"></a>

Das AWS SDK für .NET bietet ein Objektpersistenzmodell, mit dem Sie Ihre clientseitigen Klassen Amazon DynamoDB-Tabellen zuordnen können. Die einzelnen Objekt-Instances werden anschließend einem Element in den entsprechenden Tabellen zugeordnet. Zum Speichern der clientseitigen Objekte in den Tabellen stellt das Object-Persistence-Modell die Klasse `DynamoDBContext` bereit, einen Eintrittspunkt für DynamoDB. Mit dieser Klasse verfügen Sie über eine Verbindung zu DynamoDB, können auf Tabellen zugreifen und verschiedene CRUD-Operationen sowie Abfragen ausführen.

Das Objektpersistenzmodell bietet eine Reihe von Attributen, um clientseitige Klassen Tabellen und Tabellenattributen zuzuordnen. properties/fields 

**Anmerkung**  
Das Object Persistence-Modell stellt keine API zum Erstellen, Aktualisieren oder Löschen von Tabellen bereit. Es stellt ausschließlich Datenoperationen bereit. Sie können nur die AWS SDK für .NET Low-Level-API verwenden, um Tabellen zu erstellen, zu aktualisieren und zu löschen.

Das folgende Beispiel zeigt, wie das Object Persistence-Modell funktioniert. Es wird mit der Tabelle `ProductCatalog` gestartet. Es besitzt `Id` als Primärschlüssel.

```
ProductCatalog(Id, ...)
```

Angenommen, Sie besitzen die Klasse `Book` mit den Eigenschaften `Title`, `ISBN` und `Authors`. Sie können die Klasse `Book` der Tabelle `ProductCatalog` zuordnen, indem Sie die durch das Object Persistence-Modell definierten Attribute hinzufügen wie im folgenden C\$1-Codeausschnitt gezeigt.

**Example**  

```
[DynamoDBTable("ProductCatalog")]
  public class Book
  {
    [DynamoDBHashKey]
    public int Id { get; set; }

    public string Title { get; set; }
    public int ISBN { get; set; }

    [DynamoDBProperty("Authors")]
    public List<string> BookAuthors { get; set; }

    [DynamoDBIgnore]
    public string CoverPage { get; set; }
  }
```

Im vorherigen Beispiel ordnet das Attribut `DynamoDBTable` die Klasse `Book` der Tabelle `ProductCatalog` zu.

Das Object Persistence-Modell unterstützt die explizite und das Standardmapping zwischen Klasseneigenschaften und Tabellenattributen.
+ **Explizites Mapping – **Um eine Eigenschaft einem Primärschlüssel zuzuordnen, müssen Sie die `DynamoDBHashKey`- und `DynamoDBRangeKey`-Attribute des „Object-Persistence“-Modells verwenden. Außerdem gilt für andere als Primärschlüsselattribute, dass Sie das Mapping durch explizites Hinzufügen des Attributs `DynamoDBProperty` definieren müssen, wenn der Name einer Eigenschaft in Ihrer Klasse und des Tabellenattributs, dem Sie diese zuordnen möchten, nicht identisch sind.

  Im vorherigen Beispiel werden die Eigenschaft `Id` dem Primärschlüssel mit dem gleichen Namen und die Eigenschaft `BookAuthors` dem Attribut `Authors` in der Tabelle `ProductCatalog` zugeordnet.
+ **Standard-Mapping – **Standardmäßig ordnet das „Object Persistence“-Modell die Klasseneigenschaften den Attributen mit identischem Namen in der Tabelle zu.

  Im vorherigen Beispiel werden die Eigenschaften `Title` und `ISBN` den Attributen mit den gleichen Namen in der Tabelle `ProductCatalog` zugeordnet.

Sie müssen nicht jede einzelne Klasseneigenschaft zuordnen. Sie erkennen diese Eigenschaften, indem Sie das `DynamoDBIgnore`-Attribut hinzufügen. Wenn Sie eine `Book`-Instance in die Tabelle hochladen, enthält der `DynamoDBContext` nicht die `CoverPage`-Eigenschaft. Diese Eigenschaft wird auch nicht zurückgegeben, wenn Sie die Book-Instance abrufen.

Sie können Eigenschaften von primitiven .NET-Typen wie „int“ und „string“ zuweisen. Sie können auch beliebige Datentypen zuordnen, solange Sie einen geeigneten Konverter bereitstellen, um diese Datentypen einem DynamoDB-Datentyp zuzuordnen. Weitere Informationen zum Mapping beliebiger Datentypen finden Sie unter [Zuordnen beliebiger Daten mit DynamoDB mithilfe des AWS SDK für .NET Objektpersistenzmodells](DynamoDBContext.ArbitraryDataMapping.md).

Das Object Persistence-Modell unterstützt die optimistische Sperre. Während einer Aktualisierung stellt diese Funktion sicher, dass Sie über die neueste Kopie des zu aktualisierenden Elements verfügen. Weitere Informationen finden Sie unter [Optimistisches Sperren mit DynamoDB und dem AWS SDK für .NET Objektpersistenzmodell](DynamoDBContext.VersionSupport.md).

Weitere Informationen finden Sie in den folgenden Themen.

**Topics**
+ [

## Unterstützte Datentypen
](#DotNetDynamoDBContext.SupportedTypes)
+ [

# DynamoDB-Attribute aus dem Object Persistence-Modell von .NET
](DeclarativeTagsList.md)
+ [

# DBContext Dynamo-Klasse aus dem .NET-Objektpersistenzmodell
](DotNetDynamoDBContext.md)
+ [

# Optimistisches Sperren mit DynamoDB und dem AWS SDK für .NET Objektpersistenzmodell
](DynamoDBContext.VersionSupport.md)
+ [

# Zuordnen beliebiger Daten mit DynamoDB mithilfe des AWS SDK für .NET Objektpersistenzmodells
](DynamoDBContext.ArbitraryDataMapping.md)

## Unterstützte Datentypen
<a name="DotNetDynamoDBContext.SupportedTypes"></a>

Das Object Persistence-Modell unterstützt eine Reihe primitiver .NET-Datentypen, Sammlungen sowie beliebiger Datentypen. Das Modell unterstützt die folgenden primitiven Datentypen. 
+ `bool`
+ `byte` 
+ `char`
+ `DateTime`
+ `decimal`
+ `double`
+ `float`
+ `Int16`
+ `Int32`
+ `Int64`
+ `SByte`
+ `string`
+ `UInt16`
+ `UInt32`
+ `UInt64`

Das Objektpersistenzmodell unterstützt auch die .NET-Sammlungstypen. `DynamoDBContext`ist in der Lage, konkrete Sammlungstypen und einfache Plain Old CLR-Objekte () POCOs zu konvertieren.

In der folgenden Tabelle ist das Mapping der vorhergehenden .NET-Typen zu den DynamoDB-Typen zusammengefasst.


****  

| .NET-primitiver Typ | DynamoDB-Typ | 
| --- | --- | 
|  Alle Zahlentypen  |  `N` (Zahlentyp)  | 
|  Alle Zeichenfolgetypen  |  `S` (Zeichenfolgetyp)   | 
|  MemoryStream, Byte []  |  `B` (Binärtyp)   | 
| bool | N (Zahlentyp) 0 repräsentiert False und 1 steht für True. | 
| Sammlungstypen | BS-(Binärsatz)-Typ, SS-(Zeichenfolgesatz)-Typ und NS-(Zahlensatz)-Typ. | 
| DateTime | S (Zeichenfolgetyp). Die DateTime-Werte werden als ISO-8601-formatierte Zeichenfolgen gespeichert. | 

Das Object Persistence-Modell unterstützt außerdem beliebige Datentypen. Allerdings müssen Sie einen Konverter-Code bereitstellen, um die komplexen Typen den DynamoDB-Typen zuzuordnen.

**Anmerkung**  
Leere Binärwerte werden unterstützt.
Das Lesen von leeren Zeichenfolgenwerten wird unterstützt. Leere Zeichenfolgen-Attributwerte werden beim Schreiben zu DynamoDB in Attributwerten vom Typ Zeichenfolgensatz unterstützt. Leere Zeichenfolgen-Attributwerte des Zeichenfolgentyps und leere Zeichenfolgenwerte innerhalb des Listen- oder Map-Typs werden aus Schreibanforderungen gelöscht.

# DynamoDB-Attribute aus dem Object Persistence-Modell von .NET
<a name="DeclarativeTagsList"></a>

Dieser Abschnitt beschreibt die Attribute, die das Object-Persistence-Modell bereitstellt, damit Sie Ihre Klassen und Eigenschaften den DynamoDB-Tabellen und -Attributen zuordnen können.

**Anmerkung**  
In den folgenden Attributen werden ausschließlich `DynamoDBTable` und `DynamoDBHashKey` benötigt.

## Dynamo DBGlobal SecondaryIndexHashKey
<a name="w2aac17b9c21c23c37b7"></a>

Ordnet eine Klasseneigenschaft dem Partitionsschlüssel eines globalen sekundären Indexes zu. Verwenden Sie dieses Attribut, wenn Sie einen globalen sekundären Index `Query` möchten.

## Dynamo DBGlobal SecondaryIndexRangeKey
<a name="w2aac17b9c21c23c37b9"></a>

Ordnet eine Klasseneigenschaft dem Sortierungsschlüssel eines globalen sekundären Indexes zu. Verwenden Sie dieses Attribut, wenn Sie eine `Query` für einen globalen sekundären Schlüssel ausführen müssen und die Ergebnisse mithilfe des Indexsortierschlüssels verfeinern möchten.

## Dynamo-Schlüssel DBHash
<a name="w2aac17b9c21c23c37c11"></a>

Ordnet eine Klasseneigenschaft dem Partitionsschlüssel des Primärschlüssels der Tabelle zu. Die Primärschlüsselattribute können nicht ein Sammlungstyp sein.

Im folgenden C\$1-Codebeispiel werden die Klasse `Book` der Tabelle `ProductCatalog` und die Eigenschaft `Id` dem Partitionsschlüssel des Primärschlüssels der Tabelle zugeordnet.

```
[DynamoDBTable("ProductCatalog")]
public class Book 
{
    [DynamoDBHashKey]
    public int Id { get; set; }

    // Additional properties go here.
}
```

## Dynamo DBIgnore
<a name="w2aac17b9c21c23c37c13"></a>

Zeigt an, dass die zugeordnete Eigenschaft ignoriert werden sollte. Wenn Sie keine Klasseneigenschaften speichern möchten, können Sie dieses Attribut hinzufügen, um `DynamoDBContext` anzuweisen, diese Eigenschaft beim Speichern von Objekten zur Tabelle nicht einzufügen.

## Dynamo DBLocal SecondaryIndexRangeKey
<a name="w2aac17b9c21c23c37c15"></a>

Ordnet eine Klasseneigenschaft dem Sortierungsschlüssel eines lokalen sekundären Indexes zu. Verwenden Sie dieses Attribut, wenn Sie eine `Query` für einen lokalen sekundären Index ausführen müssen und die Ergebnisse mithilfe des Indexsortierschlüssels verfeinern möchten.

## Dynamo DBProperty
<a name="w2aac17b9c21c23c37c17"></a>

Ordnet eine Klasseneigenschaft einem Tabellenattribut zu. Wenn die Klasseneigenschaft einem Tabellenattribut mit dem gleichen Namen zugeordnet ist, müssen Sie dieses Attribut nicht angeben. Wenn die Namen jedoch nicht identisch sind, können Sie diesen Tag verwenden, um das Mapping bereitzustellen. In der folgenden C\$1-Anweisung ordnet `DynamoDBProperty` die Eigenschaft `BookAuthors` dem Attribut `Authors` in der Tabelle zu. 

```
[DynamoDBProperty("Authors")]
public List<string> BookAuthors { get; set; }
```

`DynamoDBContext` verwendet diese Mappinginformationen, um beim Speichern von Objektdaten zur entsprechenden Tabelle das Attribut `Authors` zu erstellen.

## Dynamo DBRenamable
<a name="w2aac17b9c21c23c37c19"></a>

Gibt einen alternativen Namen für eine Klasseneigenschaft an. Dies eignet sich für das Schreiben eines benutzerdefinierten Konverters, um beliebige Daten einer DynamoDB-Tabelle, in der sich der Name der Klasseneigenschaft von dem des Tabellenattributs unterscheidet, zuzuordnen.

## Dynamo-Schlüssel DBRange
<a name="w2aac17b9c21c23c37c21"></a>

Ordnet eine Klasseneigenschaft dem Sortierschlüssel des Primärschlüssels der Tabelle zu. Wenn die Tabelle über einen zusammengesetzten Primärschlüssel (Partitionsschlüssel und Sortierschlüssel) verfügt, müssen Sie sowohl das Attribut `DynamoDBHashKey` als auch das Attribut `DynamoDBRangeKey` im Klassenmapping angeben.

Die Beispieltabelle `Reply` verfügt über einen Primärschlüssel, der aus dem Partitionsschlüssel `Id` und dem Sortierschlüssel `Replenishment` besteht. Im folgenden C\$1-Codebeispiel wird die Klasse `Reply` der Tabelle `Reply` zugeordnet. Die Klassendefinition gibt ebenfalls an, dass zwei ihrer Eigenschaften den Primärschlüsseln zugeordnet werden.

```
[DynamoDBTable("Reply")]
public class Reply 
{
   [DynamoDBHashKey]
   public int ThreadId { get; set; }
   [DynamoDBRangeKey]
   public string Replenishment { get; set; }
   
   // Additional properties go here.
}
```

## Dynamo DBTable
<a name="w2aac17b9c21c23c37c23"></a>

Identifiziert die Zieltabelle in DynamoDB, zu der die Klasse zugeordnet wird. Im folgenden C\$1-Codebeispiel wird beispielsweise die Klasse `Developer` der Tabelle `People` in DynamoDB zugeordnet.

```
[DynamoDBTable("People")]
public class Developer { ...}
```

Dieses Attribut kann geerbt oder überschrieben werden.
+ Das `DynamoDBTable`-Attribut kann geerbt werden. Wenn Sie im vorherigen Beispiel die neue Klasse `Lead` hinzufügen, die von der Klasse `Developer` erbt, wird diese ebenfalls der Tabelle `People` zugeordnet. Sowohl das Objekt `Developer` als auch das Objekt `Lead` werden in der Tabelle `People` gespeichert.
+ Das `DynamoDBTable`-Attribut kann auch überschrieben werden. Im folgenden C\$1-Codebeispiel erbt die Klasse `Manager` von der Klasse `Developer`. Durch das explizite Hinzufügen des Attributs `DynamoDBTable` wird die Klasse jedoch einer anderen Tabelle (`Managers`) zugeordnet.

  ```
  [DynamoDBTable("Managers")]
  public class Manager : Developer { ...}
  ```

 Sie können den optionalen Parameter `LowerCamelCaseProperties` hinzufügen, um DynamoDB aufzufordern, den ersten Buchstaben des Eigenschaftsnamens beim Speichern von Objekten in einer Tabelle klein zu schreiben wie im folgenden C\$1-Codebeispiel gezeigt.

```
[DynamoDBTable("People", LowerCamelCaseProperties=true)]
public class Developer 
{
    string DeveloperName;
    ...
}
```

Beim Speichern von Instances der Klasse `Developer` speichert `DynamoDBContext` die Eigenschaft `DeveloperName` als `developerName`.

## Dynamo DBVersion
<a name="w2aac17b9c21c23c37c25"></a>

Identifiziert eine Klasseneigenschaft für das Speichern der Versionsnummer des Elements. Weitere Informationen über das Versioning finden Sie unter [Optimistisches Sperren mit DynamoDB und dem AWS SDK für .NET Objektpersistenzmodell](DynamoDBContext.VersionSupport.md).

# DBContext Dynamo-Klasse aus dem .NET-Objektpersistenzmodell
<a name="DotNetDynamoDBContext"></a>

Die `DynamoDBContext`-Klasse ist der Eintrittspunkt zu der Amazon-DynamoDB-Datenbank. Mit dieser Klasse verfügen Sie über eine Verbindung zu DynamoDB und können auf die Daten in unterschiedlichen Tabellen zugreifen, verschiedene CRUD-Operationen durchführen sowie Abfragen ausführen. Die Klasse `DynamoDBContext`-stellt folgende Methoden bereit.

**Topics**
+ [

## Erstellen MultiTable BatchGet
](#w2aac17b9c21c23c39b7)
+ [

## Erschaffen MultiTable BatchWrite
](#w2aac17b9c21c23c39b9)
+ [

## CreateBatchGet
](#w2aac17b9c21c23c39c11)
+ [

## CreateBatchWrite
](#w2aac17b9c21c23c39c13)
+ [

## Delete
](#w2aac17b9c21c23c39c15)
+ [

## Dispose
](#w2aac17b9c21c23c39c17)
+ [

## ExecuteBatchGet
](#w2aac17b9c21c23c39c19)
+ [

## ExecuteBatchWrite
](#w2aac17b9c21c23c39c21)
+ [

## FromDocument
](#w2aac17b9c21c23c39c23)
+ [

## FromQuery
](#w2aac17b9c21c23c39c25)
+ [

## FromScan
](#w2aac17b9c21c23c39c27)
+ [

## GetTargetTable
](#w2aac17b9c21c23c39c29)
+ [

## Load
](#w2aac17b9c21c23c39c31)
+ [

## Query
](#w2aac17b9c21c23c39c33)
+ [

## Save
](#w2aac17b9c21c23c39c35)
+ [

## Scan
](#w2aac17b9c21c23c39c37)
+ [

## ToDocument
](#w2aac17b9c21c23c39c39)
+ [

## Optionale Parameter für Dynamo angeben DBContext
](#OptionalConfigParams)

## Erstellen MultiTable BatchGet
<a name="w2aac17b9c21c23c39b7"></a>

Erstellt ein `MultiTableBatchGet`-Objekt, das aus verschiedenen einzelnen `BatchGet`-Objekten besteht. Jedes dieser `BatchGet`-Objekte kann verwendet werden, um Elemente aus einer einzelnen DynamoDB-Tabelle abzurufen.

Um die Elemente aus Tabellen abzurufen, verwenden Sie die Methode `ExecuteBatchGet`, indem Sie das `MultiTableBatchGet`-Objekt als Parameter übergeben.

## Erschaffen MultiTable BatchWrite
<a name="w2aac17b9c21c23c39b9"></a>

Erstellt ein `MultiTableBatchWrite`-Objekt, das aus verschiedenen einzelnen `BatchWrite`-Objekten besteht. Jedes dieser `BatchWrite`-Objekte kann für das Schreiben und das Löschen von Elementen in einer einzelnen DynamoDB-Tabelle verwendet werden.

Um zu Tabellen zu schreiben, verwenden Sie die Methode `ExecuteBatchWrite`, indem Sie das `MultiTableBatchWrite`-Objekt als Parameter übergeben.

## CreateBatchGet
<a name="w2aac17b9c21c23c39c11"></a>

Erstellt ein `BatchGet`-Objekt, welches für das Abrufen mehrerer Elemente aus einer Tabelle verwenden werden kann. 

## CreateBatchWrite
<a name="w2aac17b9c21c23c39c13"></a>

Erstellt ein `BatchWrite`-Objekt, das Sie zum Ablegen mehrerer Elemente in einer Tabelle oder zum Löschen mehrerer Elemente aus einer Tabelle verwenden können. 

## Delete
<a name="w2aac17b9c21c23c39c15"></a>

Löscht ein Element aus der Tabelle. Die Methode erfordert den Primärschlüssel des Elements, das Sie löschen möchten. Sie können entweder den Primärschlüsselwert oder ein clientseitiges Objekt bereitstellen, das einen Primärschlüsselwert als Parameter für diese Methode enthält.
+ Wenn Sie ein clientseitiges Objekt als Parameter angeben und die optimistische Sperre aktiviert haben, ist der Löschvorgang nur dann erfolgreich, wenn die clientseitigen und die serverseitigen Versionen des Objekts übereinstimmen.
+ Wenn Sie lediglich den Primärschlüsselwert als Parameter angeben, ist der Löschvorgang erfolgreich, unabhängig davon, ob die optimistische Sperre aktiv ist oder nicht.

**Anmerkung**  
Um diese Operation im Hintergrund auszuführen, nutzen Sie stattdessen die `DeleteAsync`-Methode.

## Dispose
<a name="w2aac17b9c21c23c39c17"></a>

Entsorgt alle verwalteten und nicht verwalteten Ressourcen.

## ExecuteBatchGet
<a name="w2aac17b9c21c23c39c19"></a>

Liest Daten aus einer oder mehreren Tabellen und verarbeitet alle `BatchGet`-Objekte in einem `MultiTableBatchGet`.

**Anmerkung**  
Um diese Operation im Hintergrund auszuführen, nutzen Sie stattdessen die `ExecuteBatchGetAsync`-Methode.

## ExecuteBatchWrite
<a name="w2aac17b9c21c23c39c21"></a>

Liest oder löscht Daten aus einer oder mehreren Tabellen und verarbeitet alle `BatchWrite`-Objekte in einem `MultiTableBatchWrite`.

**Anmerkung**  
Um diese Operation im Hintergrund auszuführen, nutzen Sie stattdessen die `ExecuteBatchWriteAsync`-Methode.

## FromDocument
<a name="w2aac17b9c21c23c39c23"></a>

Angesichts einer `Document`-Instance, gibt die `FromDocument`-Methode eine Instance der clientseitigen Klasse zurück.

Dies ist hilfreich, wenn Sie die Dokumentenmodell-Klassen zusammen mit dem Object Persistence-Modell verwenden möchten, um beliebige Datenoperationen durchzuführen. Weitere Hinweise zu den von der bereitgestellten Dokumentmodellklassen finden Sie unter[Arbeiten dem .NET-Dokumentmodell in DynamoDB](DotNetSDKMidLevel.md). AWS SDK für .NET

Angenommen, Sie besitzen ein `Document`-Objekt mit dem Namen `doc`, das eine Darstellung eines `Forum`-Elements enthält. (Informationen zum Konstruieren dieses Objekts finden Sie in der Beschreibung der Methode `ToDocument` weiter unten in diesem Thema.) Sie können `FromDocument` verwenden, um das `Forum`-Element aus dem `Document` abzurufen, wie im folgendem C\$1-Codebeispiel gezeigt.

**Example**  

```
forum101 = context.FromDocument<Forum>(101);
```

**Anmerkung**  
Wenn das `Document`-Objekt die `IEnumerable`-Schnittstelle implementiert, können Sie stattdessen die `FromDocuments`-Methode nutzen. Auf diese Weise können Sie alle Klassen-Instances im `Document` durchlaufen.

## FromQuery
<a name="w2aac17b9c21c23c39c25"></a>

Führt eine `Query`-Operation mit den Abfrageparametern aus, die in einem `QueryOperationConfig`-Objekt definiert sind.

**Anmerkung**  
Um diese Operation im Hintergrund auszuführen, nutzen Sie stattdessen die `FromQueryAsync`-Methode.

## FromScan
<a name="w2aac17b9c21c23c39c27"></a>

Führt eine `Scan`-Operation mit den Scan-Parametern aus, die in einem `ScanOperationConfig`-Objekt definiert sind.

**Anmerkung**  
Um diese Operation im Hintergrund auszuführen, nutzen Sie stattdessen die `FromScanAsync`-Methode.

## GetTargetTable
<a name="w2aac17b9c21c23c39c29"></a>

Ruft die Zieltabelle für den angegebenen Typ ab. Dies ist nützlich, wenn Sie einen benutzerdefinierten Konverter schreiben, der einer DynamoDB-Tabelle beliebige Daten zuordnet, und ermitteln müssen, welche Tabelle einem benutzerdefinierten Datentyp zugeordnet ist.

## Load
<a name="w2aac17b9c21c23c39c31"></a>

Ruft ein Element aus einer Tabelle ab. Die Methode erfordert lediglich den Primärschlüssel des Elements, das Sie abrufen möchten. 

Standardmäßig gibt DynamoDB das Element mit Werten die Eventually Consistent sind zurück. Weitere Informationen zum Eventual Consistency-Modell finden Sie unter [DynamoDB-Lesekonsistenz](HowItWorks.ReadConsistency.md).

`Load`oder `LoadAsync` Methode ruft den [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)Vorgang auf, bei dem Sie den Primärschlüssel für die Tabelle angeben müssen. Da der `IndexName`-Parameter von `GetItem` ignoriert wird, können Sie ein Element nicht mithilfe der Partition oder des Sortierschlüssels eines Indexes laden. Daher müssen Sie den Primärschlüssel der Tabelle verwenden, um ein Element zu laden.

**Anmerkung**  
Um diese Operation im Hintergrund auszuführen, nutzen Sie stattdessen die `LoadAsync`-Methode. Ein Beispiel für die Verwendung der `LoadAsync`-Methode zur Ausführung von CRUD-Vorgängen auf hoher Ebene in einer DynamoDB-Tabelle finden Sie im Folgenden.

```
    /// <summary>
    /// Shows how to perform high-level CRUD operations on an Amazon DynamoDB
    /// table.
    /// </summary>
    public class HighLevelItemCrud
    {
        public static async Task Main()
        {
            var client = new AmazonDynamoDBClient();
            DynamoDBContext context = new DynamoDBContext(client);
            await PerformCRUDOperations(context);
        }

        public static async Task PerformCRUDOperations(IDynamoDBContext context)
        {
            int bookId = 1001; // Some unique value.
            Book myBook = new Book
            {
                Id = bookId,
                Title = "object persistence-AWS SDK for.NET SDK-Book 1001",
                Isbn = "111-1111111001",
                BookAuthors = new List<string> { "Author 1", "Author 2" },
            };

            // Save the book to the ProductCatalog table.
            await context.SaveAsync(myBook);

            // Retrieve the book from the ProductCatalog table.
            Book bookRetrieved = await context.LoadAsync<Book>(bookId);

            // Update some properties.
            bookRetrieved.Isbn = "222-2222221001";

            // Update existing authors list with the following values.
            bookRetrieved.BookAuthors = new List<string> { " Author 1", "Author x" };
            await context.SaveAsync(bookRetrieved);

            // Retrieve the updated book. This time, add the optional
            // ConsistentRead parameter using DynamoDBContextConfig object.
            await context.LoadAsync<Book>(bookId, new DynamoDBContextConfig
            {
                ConsistentRead = true,
            });

            // Delete the book.
            await context.DeleteAsync<Book>(bookId);

            // Try to retrieve deleted book. It should return null.
            Book deletedBook = await context.LoadAsync<Book>(bookId, new DynamoDBContextConfig
            {
                ConsistentRead = true,
            });

            if (deletedBook == null)
            {
                Console.WriteLine("Book is deleted");
            }
        }
    }
```

## Query
<a name="w2aac17b9c21c23c39c33"></a>

Abfragen einer Tabelle basierend auf den Abfrageparametern, die Sie bereitstellen.

Sie können eine Tabelle nur dann abfragen, wenn sie über einen zusammengesetzten Primärschlüssel verfügt (Partitionsschlüssel und Sortierschlüssel). Bei der Abfrage müssen Sie einen Partitionsschlüssel und eine Bedingung angeben, die für den Sortierschlüssel gilt.

Angenommen, Sie verfügen über die clientseitige Klasse `Reply`, die der Tabelle `Reply` in DynamoDB zugeordnet ist. Das folgende C\$1-Codebeispiel fragt die Tabelle `Reply` ab, um alle Forum-Thread-Antworten zu finden, die in den letzten 15 Tagen veröffentlicht wurden. Die Tabelle `Reply` verfügt über einen Primärschlüssel, der aus einem Partitionsschlüssel (`Id`) und Sortierschlüssel (`ReplyDateTime`) besteht.

**Example**  

```
DynamoDBContext context = new DynamoDBContext(client);

string replyId = "DynamoDB#DynamoDB Thread 1"; //Partition key
DateTime twoWeeksAgoDate = DateTime.UtcNow.Subtract(new TimeSpan(14, 0, 0, 0)); // Date to compare.
IEnumerable<Reply> latestReplies = context.Query<Reply>(replyId, QueryOperator.GreaterThan, twoWeeksAgoDate);
```

Dies gibt eine Sammlung von `Reply`-Objekten zurück. 

Die Methode `Query` gibt standardmäßig eine „lazy-loaded“ `IEnumerable`-Sammlung zurück. Sie gibt anfänglich ausschließlich eine Ergebnisseite zurück und führt dann bei Bedarf einen Dienstaufruf für die nächste Seite durch. Um alle übereinstimmenden Elemente zu erhalten, müssen Sie lediglich die `IEnumerable`-Sammlung durchlaufen.

Wenn die Tabelle über einen einfachen Primärschlüssel (Partitionsschlüssel) verfügt, können Sie die Methode `Query` nicht verwenden. Stattdessen können Sie die Methode `Load` verwenden und den Partitionsschlüssel bereitstellen, um das Element abzurufen.

**Anmerkung**  
Um diese Operation im Hintergrund auszuführen, nutzen Sie stattdessen die `QueryAsync`-Methode.

## Save
<a name="w2aac17b9c21c23c39c35"></a>

Speichert das angegebene Objekt in der Tabelle. Wenn der im Eingabeobjekt angegebene Primärschlüssel in der Tabelle nicht vorhanden ist, fügt die Methode der Tabelle ein neues Element hinzu. Wenn der Primärschlüssel vorhanden ist, aktualisiert die Methode das vorhandene Element.

Wenn Sie eine optimistische Sperre konfiguriert haben, ist die Aktualisierung nur dann erfolgreich, wenn die client- und serverseitigen Versionen des Elements übereinstimmen. Weitere Informationen finden Sie unter [Optimistisches Sperren mit DynamoDB und dem AWS SDK für .NET Objektpersistenzmodell](DynamoDBContext.VersionSupport.md).

**Anmerkung**  
Um diese Operation im Hintergrund auszuführen, nutzen Sie stattdessen die `SaveAsync`-Methode.

## Scan
<a name="w2aac17b9c21c23c39c37"></a>

Führt einen gesamten Tabellen-Scan durch. 

Sie können Scan-Ergebnisse filtern, indem Sie eine Scan-Bedingung angeben. Die Bedingung kann auf jedem Attribut in der Tabelle ausgewertet werden. Angenommen, Sie verfügen über die clientseitige Klasse `Book`, die der Tabelle `ProductCatalog` in DynamoDB zugeordnet ist. Im folgenden C\$1-Beispiel werden die Tabelle gescannt und ausschließlich die Book-Elemente zurückgegeben, deren Preis kleiner als 0 ist.

**Example**  

```
IEnumerable<Book> itemsWithWrongPrice = context.Scan<Book>(
                    new ScanCondition("Price", ScanOperator.LessThan, price),
                    new ScanCondition("ProductCategory", ScanOperator.Equal, "Book")
      );
```

Die Methode `Scan` gibt standardmäßig eine „lazy-loaded“ `IEnumerable`-Sammlung zurück. Sie gibt anfänglich ausschließlich eine Ergebnisseite zurück und führt dann bei Bedarf einen Dienstaufruf für die nächste Seite durch. Um alle übereinstimmenden Elemente zu erhalten, müssen Sie lediglich die `IEnumerable`-Sammlung durchlaufen.

Aus Leistungsgründen sollten Sie Ihre Tabellen abfragen und einen Tabellen-Scan vermeiden.

**Anmerkung**  
Um diese Operation im Hintergrund auszuführen, nutzen Sie stattdessen die `ScanAsync`-Methode.

## ToDocument
<a name="w2aac17b9c21c23c39c39"></a>

Gibt eine Instance der `Document`-Dokumentenmodell-Klasse aus Ihrer Klassen-Instance zurück. 

Dies ist hilfreich, wenn Sie die Dokumentenmodell-Klassen zusammen mit dem Object Persistence-Modell verwenden möchten, um beliebige Datenoperationen durchzuführen. Weitere Hinweise zu den von der bereitgestellten Dokumentmodellklassen finden Sie unter[Arbeiten dem .NET-Dokumentmodell in DynamoDB](DotNetSDKMidLevel.md). AWS SDK für .NET

Angenommen, Sie verfügen über eine clientseitige Klasse, die der Tabelle `Forum` zugeordnet ist. Sie können anschließend einen `DynamoDBContext` verwenden, um ein Element als `Document`-Objekt aus der Tabelle `Forum` abzurufen, wie im folgenden C\$1-Codebeispiel gezeigt.

**Example**  

```
DynamoDBContext context = new DynamoDBContext(client);

Forum forum101 = context.Load<Forum>(101); // Retrieve a forum by primary key.
Document doc = context.ToDocument<Forum>(forum101);
```

## Optionale Parameter für Dynamo angeben DBContext
<a name="OptionalConfigParams"></a>

Wenn Sie das Object Persistence-Modell verwenden, können Sie für den `DynamoDBContext` folgende optionale Parameter angeben.
+ **`ConsistentRead` – **Beim Abrufen von Daten mithilfe der `Load`, `Query` oder `Scan`-Operation können Sie diesen Parameter optional hinzufügen, um die neuesten Werte der Daten anzufordern.
+ **`IgnoreNullValues` – **Dieser Parameter teilt `DynamoDBContext` mit, Null-Werte von Attributen während einer `Save`-Operation zu ignorieren. Wenn dieser Parameter „false“ oder nicht festgelegt ist, wird ein Nullwert als Anweisung interpretiert, das betreffende Attribut zu löschen. 
+ **`SkipVersionCheck`—** Dieser Parameter teilt `DynamoDBContext` mit, beim Speichern oder Löschen von Elementen keine Versionen zu vergleichen. Weitere Informationen über das Versioning finden Sie unter [Optimistisches Sperren mit DynamoDB und dem AWS SDK für .NET Objektpersistenzmodell](DynamoDBContext.VersionSupport.md).
+ **`TableNamePrefix` – ** Stellt allen Tabellennamen eine bestimmte Zeichenfolge voran. Wenn dieser Parameter Null ist (oder nicht festgelegt ist), dann wird kein Präfix verwendet.
+ `DynamoDBEntryConversion` – Gibt das Konvertierungsschema an, das vom Client verwendet wird. Sie können diesen Parameter auf Version V1 oder V2 festlegen. V1 ist die Standardversion.

  Je nach der von Ihnen festgelegten Version ändert sich das Verhalten dieses Parameters. Beispiel:
  + In V1 wird der Datentyp `bool` in den Zahlentyp `N` konvertiert, wobei 0 für falsch und 1 für wahr steht. In V2 wird `bool` in `BOOL` konvertiert.
  + In V2 werden Listen und Arrays nicht zusammen mit gruppiert. HashSets Listen und Arrays mit numerischen, auf Zeichenketten basierenden Typen und binären Typen werden in den Typ `L` (List) konvertiert, der leer gesendet werden kann, um eine Liste zu aktualisieren. Dies ist anders als bei V1, wo das Senden einer leeren Liste nicht möglich ist.

    In V1 werden Sammlungstypen wie List und Arrays gleich behandelt. HashSet Liste und HashSet Array von Zahlen werden in den Typ `NS` (Zahlensatz) konvertiert. 

  Im folgenden Beispiel wird die Version des Konvertierungsschemas auf V2 festgelegt, wodurch das Konvertierungsverhalten zwischen .NET-Typen und DynamoDB-Datentypen geändert wird.

  ```
  var config = new DynamoDBContextConfig
  {
      Conversion = DynamoDBEntryConversion.V2
  };
  var contextV2 = new DynamoDBContext(client, config);
  ```

Im folgenden C\$1-Codebeispiel wird durch Angabe von zwei der vorherigen optionalen Parameter, `ConsistentRead` und `SkipVersionCheck`, ein neuer Parameter `DynamoDBContext` erstellt.

**Example**  

```
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
...
DynamoDBContext context =
       new DynamoDBContext(client, new DynamoDBContextConfig { ConsistentRead = true, SkipVersionCheck = true});
```

`DynamoDBContext` berücksichtigt diese optionalen Parameter bei jeder Anforderung, die unter Verwendung dieses Kontextes gesendet werden. 

Anstatt diese Parameter auf der `DynamoDBContext`-Ebene festzulegen, können Sie diese mithilfe von `DynamoDBContext` für einzelne von Ihnen ausgeführte Operationen festlegen, wie im folgenden C\$1-Codebeispiel gezeigt. Das Beispiel lädt ein bestimmtes Book-Element. Die `Load`-Methode von `DynamoDBContext` gibt die optionalen Parameter `ConsistentRead` und `SkipVersionCheck` an.

**Example**  

```
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
...
DynamoDBContext context = new DynamoDBContext(client);
Book bookItem = context.Load<Book>(productId,new DynamoDBContextConfig{ ConsistentRead = true, SkipVersionCheck = true });
```

In diesem Fall berücksichtigt `DynamoDBContext` diese Parameter ausschließlich beim Senden der `Get`-Anforderung.

# Optimistisches Sperren mit DynamoDB und dem AWS SDK für .NET Objektpersistenzmodell
<a name="DynamoDBContext.VersionSupport"></a>

Die Unterstützung der optimistischen Sperre im Object Persistence-Modell stellt sicher, dass die Elementversion für Ihre Anwendung dieselbe ist wie die serverseitige Elementversion, bevor das Element aktualisiert oder gelöscht wird. Angenommen, Sie rufen ein Element für eine Aktualisierung ab. Bevor Sie jedoch Ihre Aktualisierungen zurücksenden, aktualisiert eine andere Anwendung das gleiche Element. Jetzt verfügt Ihre Anwendung über eine veraltete Kopie des Elements. Ohne optimistische Sperre wird jede von Ihnen durchgeführte Aktualisierung die Aktualisierung von anderen Anwendungen überschreiben. 

Die Funktion "optimistische Sperre" des Object Persistence-Modells stellt den `DynamoDBVersion`-Tag bereit, den Sie für die Aktivierung der optimistische Sperre nutzen können. Um diese Funktion zu verwenden, fügen Sie Ihrer Klasse eine Eigenschaft hinzu, mit der die Versionsnummer gespeichert wird. Sie fügen der Eigenschaft das Attribut `DynamoDBVersion` hinzu. Wenn Sie das Element zum ersten Mal speichern, weist `DynamoDBContext` diesem eine Versionsnummer hinzu. Dieser Wert wird bei jeder Aktualisierung des Elements inkrementell erhöht. 

Ihre Aktualisierungs- oder Löschanforderungen werden nur erfolgreich ausgeführt, wenn die clientseitige Objektversion mit der entsprechenden Versionsnummer des Elements auf der Serverseite übereinstimmt. Wenn Ihre Anwendung über eine veraltete Kopie verfügt, muss sie die aktuelle Version vom Server erhalten, bevor sie das Element aktualisieren oder löschen kann.

Im folgenden C\$1-Codebeispiel wird die Klasse `Book` mit Object Persistence-Attributen definiert, die diese der Tabelle `ProductCatalog` zuordnen. Die Eigenschaft `VersionNumber` in der Klasse, die das `DynamoDBVersion`-Attribut aufweist, speichert den Wert der Versionsnummer.

**Example**  

```
[DynamoDBTable("ProductCatalog")]
  public class Book
  {
    [DynamoDBHashKey]   //Partition key
    public int Id { get; set; }
    [DynamoDBProperty]
    public string Title { get; set; }
    [DynamoDBProperty]
    public string ISBN { get; set; }
    [DynamoDBProperty("Authors")]
    public List<string> BookAuthors { get; set; }
    [DynamoDBVersion]
    public int? VersionNumber { get; set; }
  }
```

**Anmerkung**  
Sie können das `DynamoDBVersion`-Attribut ausschließlich auf einen löschbaren numerischen primitiven Typen anwenden (z. B. `int?`). 

Die optimistische Sperre hat folgende Auswirkungen auf diese `DynamoDBContext`-Operationen:
+ Für ein neues Element weist `DynamoDBContext` die Erstversionsnummer 0 zu. Wenn Sie ein vorhandenes Element abrufen, eine oder mehrere von dessen Eigenschaften aktualisieren und versuchen, die Änderungen zu speichern, wird die Speicheroperation nur dann erfolgreich ausgeführt, wenn die client- und serverseitige Versionsnummer übereinstimmen. `DynamoDBContext` erhöht die Versionsnummer inkrementell. Sie müssen die Versionsnummer nicht festlegen.
+ Die Methode `Delete` stellt Überladungen bereit, die entweder einen Primärschlüsselwert oder ein Objekt als Parameter aufnehmen können, wie im folgenden C\$1-Codebeispiel gezeigt.  
**Example**  

  ```
  DynamoDBContext context = new DynamoDBContext(client);
  ...
  // Load a book.
  Book book = context.Load<ProductCatalog>(111);
  // Do other operations.
  // Delete 1 - Pass in the book object.
  context.Delete<ProductCatalog>(book);
  
  // Delete 2 - Pass in the Id (primary key)
  context.Delete<ProductCatalog>(222);
  ```

  Wenn Sie ein Objekt als Parameter bereitstellen, ist der Löschvorgang nur dann erfolgreich, wenn die Objektversion mit der entsprechenden serverseitigen Elementversion übereinstimmt. Wenn Sie jedoch einen Primärschlüsselwert als Parameter bereitstellen, erkennt `DynamoDBContext` keine Versionsnummern und löscht das Element, ohne die Version zu prüfen. 

  Beachten Sie, dass die interne Implementierung von optimistischen Sperren in dem Code des Object-Persistence-Modells bedingte Aktualisierungen und bedingte Löschungs-API-Aktionen in DynamoDB verwendet.

## Deaktivieren der optimistischen Sperre
<a name="DotNetDynamoDBContext.DisablingOptimisticLocking"></a>

Um die optimistische Sperre zu deaktivieren, verwenden Sie die Konfigurationseigenschaft `SkipVersionCheck`. Sie können diese Eigenschaft bei der Erstellung von `DynamoDBContext` festlegen. In diesem Fall wird die optimistische Sperre für alle Anforderungen deaktiviert, die Sie unter Verwendung des Kontextes ausführen. Weitere Informationen finden Sie unter [Optionale Parameter für Dynamo angeben DBContext](DotNetDynamoDBContext.md#OptionalConfigParams). 

Anstatt die Eigenschaft auf der Kontextebene festzulegen, können Sie die optimistische Sperre für eine bestimmte Operation deaktivieren wie im folgenden C\$1-Codebeispiel gezeigt. Im Beispiel wird der Kontext verwendet, um ein Book-Element zu löschen. Die Methode `Delete` legt die optionale Eigenschaft `SkipVersionCheck` auf „true“ fest und deaktiviert damit die Versionsprüfung.

**Example**  

```
DynamoDBContext context = new DynamoDBContext(client);
// Load a book.
Book book = context.Load<ProductCatalog>(111);
...
// Delete the book.
context.Delete<Book>(book, new DynamoDBContextConfig { SkipVersionCheck = true });
```

# Zuordnen beliebiger Daten mit DynamoDB mithilfe des AWS SDK für .NET Objektpersistenzmodells
<a name="DynamoDBContext.ArbitraryDataMapping"></a>

Zusätzlich zu den unterstützten .NET-Typen (siehe [Unterstützte Datentypen](DotNetSDKHighLevel.md#DotNetDynamoDBContext.SupportedTypes)) können Sie Typen in Ihrer Anwendung verwenden, für die es kein direktes Mapping zu Amazon-DynamoDB-Typen gibt. Das Object-Persistence-Modell unterstützt das Speichern von Daten mit beliebigen Typen, solange Sie einen Konverter bereitstellen, um Daten des beliebigen Typs in den DynamoDB-Typ und umgekehrt zu konvertieren. Der Konverter-Code wandelt Daten während des Speicherns und Ladens der Objekte um.

Sie können clientseitig alle Typen erstellen. Die in den Tabellen gespeicherten Daten haben jedoch einen DynamoDB-Datentyp. Während Abfragen und Scans werden alle Datenvergleiche anhand der in DynamoDB gespeicherten Daten ausgeführt.

Das folgende C\$1-Codebeispiel definiert eine `Book`-Klasse mit den Eigenschaften `Id`, `Title`, `ISBN` und `Dimension`. Die Eigenschaft `Dimension` gehört zum `DimensionType`, der die Eigenschaften `Height`, `Width` und `Thickness` beschreibt. Der Beispielcode stellt die Konverter-Methoden `ToEntry` und `FromEntry` bereit, um Daten zwischen den Zeichenfolgetypen `DimensionType` und DynamoDB zu konvertieren. Beispielsweise erstellt der Konverter beim Speichern einer `Book`-Instance eine `Dimension`-Zeichenfolge wie „8.5x11x.05“. Wenn Sie ein Book abrufen, wird die Zeichenfolge in eine `DimensionType`-Instance konvertiert.

Im Beispiel wird der `Book`-Typ der Tabelle `ProductCatalog` zugewiesen. Es speichert eine `Book`-Beispiel-Instance, ruft sie ab, aktualisiert ihre Abmessungen und speichert die aktualisierte `Book`-Instance erneut.



 step-by-stepAnweisungen zum Testen des folgenden Beispiels finden Sie unter. [.NET-Codebeispiele](CodeSamples.DotNet.md)

**Example**  

```
using System;
using System.Collections.Generic;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;
using Amazon.DynamoDBv2.DocumentModel;
using Amazon.Runtime;
using Amazon.SecurityToken;

namespace com.amazonaws.codesamples
{
    class HighLevelMappingArbitraryData
    {
        private static AmazonDynamoDBClient client = new AmazonDynamoDBClient();

        static void Main(string[] args)
        {
            try
            {
                DynamoDBContext context = new DynamoDBContext(client);

                // 1. Create a book.
                DimensionType myBookDimensions = new DimensionType()
                {
                    Length = 8M,
                    Height = 11M,
                    Thickness = 0.5M
                };

                Book myBook = new Book
                {
                    Id = 501,
                    Title = "AWS SDK for .NET Object Persistence Model Handling Arbitrary Data",
                    ISBN = "999-9999999999",
                    BookAuthors = new List<string> { "Author 1", "Author 2" },
                    Dimensions = myBookDimensions
                };

                context.Save(myBook);

                // 2. Retrieve the book.
                Book bookRetrieved = context.Load<Book>(501);

                // 3. Update property (book dimensions).
                bookRetrieved.Dimensions.Height += 1;
                bookRetrieved.Dimensions.Length += 1;
                bookRetrieved.Dimensions.Thickness += 0.2M;
                // Update the book.
                context.Save(bookRetrieved);

                Console.WriteLine("To continue, press Enter");
                Console.ReadLine();
            }
            catch (AmazonDynamoDBException e) { Console.WriteLine(e.Message); }
            catch (AmazonServiceException e) { Console.WriteLine(e.Message); }
            catch (Exception e) { Console.WriteLine(e.Message); }
        }
    }
    [DynamoDBTable("ProductCatalog")]
    public class Book
    {
        [DynamoDBHashKey] //Partition key
        public int Id
        {
            get; set;
        }
        [DynamoDBProperty]
        public string Title
        {
            get; set;
        }
        [DynamoDBProperty]
        public string ISBN
        {
            get; set;
        }
        // Multi-valued (set type) attribute.
        [DynamoDBProperty("Authors")]
        public List<string> BookAuthors
        {
            get; set;
        }
        // Arbitrary type, with a converter to map it to DynamoDB type.
        [DynamoDBProperty(typeof(DimensionTypeConverter))]
        public DimensionType Dimensions
        {
            get; set;
        }
    }

    public class DimensionType
    {
        public decimal Length
        {
            get; set;
        }
        public decimal Height
        {
            get; set;
        }
        public decimal Thickness
        {
            get; set;
        }
    }

    // Converts the complex type DimensionType to string and vice-versa.
    public class DimensionTypeConverter : IPropertyConverter
    {
        public DynamoDBEntry ToEntry(object value)
        {
            DimensionType bookDimensions = value as DimensionType;
            if (bookDimensions == null) throw new ArgumentOutOfRangeException();

            string data = string.Format("{1}{0}{2}{0}{3}", " x ",
                            bookDimensions.Length, bookDimensions.Height, bookDimensions.Thickness);

            DynamoDBEntry entry = new Primitive
            {
                Value = data
            };
            return entry;
        }

        public object FromEntry(DynamoDBEntry entry)
        {
            Primitive primitive = entry as Primitive;
            if (primitive == null || !(primitive.Value is String) || string.IsNullOrEmpty((string)primitive.Value))
                throw new ArgumentOutOfRangeException();

            string[] data = ((string)(primitive.Value)).Split(new string[] { " x " }, StringSplitOptions.None);
            if (data.Length != 3) throw new ArgumentOutOfRangeException();

            DimensionType complexData = new DimensionType
            {
                Length = Convert.ToDecimal(data[0]),
                Height = Convert.ToDecimal(data[1]),
                Thickness = Convert.ToDecimal(data[2])
            };
            return complexData;
        }
    }
}
```

# Ausführen der Codebeispiele in diesem Entwicklerhandbuch
<a name="CodeSamples"></a>

 AWS SDKs Sie bieten umfassende Unterstützung für Amazon DynamoDB in den folgenden Sprachen:
+ [Java](https://aws.amazon.com/sdk-for-java)
+ [JavaScript im Browser](https://aws.amazon.com/sdk-for-browser)
+ [.NET](https://aws.amazon.com/sdk-for-net)
+ [Node.js](https://aws.amazon.com/sdk-for-node-js)
+ [PHP](https://aws.amazon.com/sdk-for-php)
+ [Python](https://aws.amazon.com/sdk-for-python)
+ [Ruby](https://aws.amazon.com/sdk-for-ruby)
+ [C\$1\$1](https://aws.amazon.com/sdk-for-cpp)
+ [Go](https://aws.amazon.com/sdk-for-go)
+ [Android](https://aws.amazon.com/mobile/sdk/)
+ [iOS](https://aws.amazon.com/mobile/sdk/)

Die Codebeispiele in diesem Entwicklerhandbuch stellen umfassendere Informationen zu DynamoDB-Operationen unter Verwendung der folgenden Programmiersprachen bereit:
+ [Java-Codebeispiele](CodeSamples.Java.md)
+ [.NET-Codebeispiele](CodeSamples.DotNet.md)

Bevor Sie mit dieser Übung beginnen können, müssen Sie ein AWS Konto erstellen, Ihren Zugriffsschlüssel und Ihren geheimen Schlüssel abrufen und AWS Command Line Interface (AWS CLI) auf Ihrem Computer einrichten. Weitere Informationen finden Sie unter [Einrichten von DynamoDB (Webservice)](SettingUp.DynamoWebService.md).

**Anmerkung**  
Wenn Sie die herunterladbare Version von DynamoDB verwenden, müssen Sie die verwenden, AWS CLI um die Tabellen und Beispieldaten zu erstellen. Sie müssen den `--endpoint-url` Parameter auch bei jedem AWS CLI Befehl angeben. Weitere Informationen finden Sie unter [Festlegen des lokalen Endpunkts](DynamoDBLocal.UsageNotes.md#DynamoDBLocal.Endpoint).

# Erstellen von Tabellen und Laden von Daten für Codebeispiele in DynamoDB
<a name="SampleData"></a>

Im Folgenden finden Sie die Grundlagen zum Erstellen von Tabellen in DynamoDB, zum Laden eines Beispiel-Datensatzes, zum Abfragen der Daten und zum Aktualisieren der Daten.
+ [Schritt 1: Erstellen einer Tabelle in DynamoDB](getting-started-step-1.md)
+ [Schritt 2: Schreiben von Daten in eine DynamoDB-Tabelle](getting-started-step-2.md)
+ [Schritt 3: Lesen von Daten aus einer DynamoDB-Tabelle](getting-started-step-3.md)
+ [Schritt 4: Aktualisieren von Daten in einer DynamoDB-Tabelle](getting-started-step-4.md)

# Java-Codebeispiele
<a name="CodeSamples.Java"></a>

**Topics**
+ [

## Java: Deine AWS Zugangsdaten einrichten
](#CodeSamples.Java.Credentials)
+ [

## Java: AWS Region und Endpunkt festlegen
](#CodeSamples.Java.RegionAndEndpoint)

Dieses Entwicklerhandbuch enthält Java-Codefragmente und ready-to-run -Programme. Sie finden diese Codebeispiele in den folgenden Abschnitten:
+ [Arbeiten mit Elementen und Attributen in DynamoDB](WorkingWithItems.md)
+ [Arbeiten mit Tabellen und Daten in DynamoDB](WorkingWithTables.md)
+ [Abfragen von Tabellen in DynamoDB](Query.md)
+ [Scannen von Tabellen in DynamoDB](Scan.md)
+ [Verbessern des Datenzugriffs mit sekundären Indizes in DynamoDB](SecondaryIndexes.md)
+ [Java 1.x: Dynamo DBMapper](DynamoDBMapper.md)
+ [Ändern Sie die Datenerfassung für DynamoDB Streams](Streams.md)

Sie können sofort beginnen, indem Sie Eclipse mit dem [AWS Toolkit for Eclipse](https://aws.amazon.com/eclipse/) verwenden. Neben einer IDE mit vollem Funktionsumfang erhalten Sie auch die AWS SDK für Java mit automatischen Updates und vorkonfigurierten Vorlagen für die Erstellung von Anwendungen. AWS 

**So führen Sie Java-Codebeispiele (mit Eclipse) aus**

1. Laden Sie die [Eclipse](http://www.eclipse.org)-IDE herunter und installieren Sie sie.

1. Laden Sie das [AWS Toolkit for Eclipse](https://aws.amazon.com/eclipse/) herunter und installieren Sie es.

1. Starten Sie Eclipse und wählen Sie im **Eclipse**-Menü **File (Datei)**, **New (Neu)** und anschließend **Other (Sonstiges)** aus.

1. Wählen Sie unter **Assistent auswählen** **AWS** aus, wählen Sie **AWS Java-Projekt** und dann **Weiter** aus.

1. Gehen **Sie unter Create an AWS Java** wie folgt vor:

   1. Geben Sie im Feld **Projektname** einen Namen für Ihr Projekt an.

   1. Wählen Sie in **Select Account (Konto wählen)** das Anmeldeinformationsprofil in der Liste aus.

      Wenn Sie das zum ersten Mal verwenden [AWS Toolkit for Eclipse](https://aws.amazon.com/eclipse/), wählen Sie ** AWS Konten konfigurieren**, um Ihre AWS Anmeldeinformationen einzurichten.

1. Wählen Sie **Finish** aus, um das Projekt zu erstellen.

1. Wählen Sie im **Eclipse**-Menü **File**, **New** und anschließend **Class** aus.

1. Geben Sie in **Java Class (Java-Klasse)** unter **Name (Name)** einen Namen für Ihre Klasse ein (verwenden Sie denselben Namen wie das Codebeispiel, das Sie ausführen möchten). Wählen Sie dann **Finish (Fertigstellen)** aus, um die Klasse zu erstellen.

1. Kopieren Sie das Codebeispiel aus der Dokumentationsseite in den Eclipse-Editor.

1. Wählen Sie im Eclipse-Menü **Run (Ausführen)** aus, um den Code auszuführen.

Das SDK für Java stellt threadsichere Clients für die Arbeit mit DynamoDB bereit. Als bewährte Methode sollten Ihre Anwendungen einen Client erstellen und diesen zwischen den Threads wiederverwenden.

Weitere Informationen hierzu finden Sie unter [AWS SDK für Java](https://aws.amazon.com/sdk-for-java).

**Anmerkung**  
Die Codebeispiele in diesem Handbuch sind für die Verwendung mit der neuesten Version des AWS SDK für Java vorgesehen.  
Wenn Sie das verwenden AWS Toolkit for Eclipse, können Sie automatische Updates für das SDK for Java konfigurieren. Gehen Sie dazu in Eclipse zu **Einstellungen** und wählen Sie **AWS Toolkit**, **AWS SDK für Java**, **Neues SDKs automatisch herunterladen**.

## Java: Deine AWS Zugangsdaten einrichten
<a name="CodeSamples.Java.Credentials"></a>

Das SDK for Java erfordert, dass Sie zur Laufzeit AWS Anmeldeinformationen für Ihre Anwendung angeben. Bei den Codebeispielen in diesem Handbuch wird davon ausgegangen, dass Sie eine AWS Anmeldeinformationsdatei verwenden, wie unter [Einrichten Ihrer AWS Anmeldeinformationen](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/set-up-creds.html) im *AWS SDK für Java Entwicklerhandbuch* beschrieben.

Im Folgenden finden Sie ein Beispiel für eine AWS Anmeldeinformationsdatei mit dem Namen`~/.aws/credentials`, wobei die Tilde (`~`) für Ihr Home-Verzeichnis steht.

```
[default]
aws_access_key_id = AWS access key ID goes here
aws_secret_access_key = Secret key goes here
```

## Java: AWS Region und Endpunkt festlegen
<a name="CodeSamples.Java.RegionAndEndpoint"></a>

Standardmäßig greifen die Codebeispiele auf DynamoDB in der Region USA West (Oregon) auf. Sie können die Region ändern, indem Sie die `AmazonDynamoDB`-Eigenschaften ändern.

Im folgenden Codebeispiel wird ein neuer `AmazonDynamoDB` instanziiert.

```
import software.amazon.dynamodb.AmazonDynamoDBClientBuilder;
import com.amazonaws.regions.Regions;
...
// This client will default to US West (Oregon)
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withRegion(Regions.US_WEST_2)
.build();
```

Sie können die Methode `withRegion` verwenden, um den Code für DynamoDB in jeder verfügbaren Region auszuführen. Die vollständige Liste finden Sie unter [AWS -Regionen und -Endpunkte](https://docs.aws.amazon.com/general/latest/gr/rande.html#ddb_region) in der *Allgemeine Amazon Web Services-Referenz*.

Wenn Sie die Codebeispiele mit DynamoDB lokal auf Ihrem Computer ausführen möchten, müssen Sie den Endpunkt wie folgt festlegen.

### AWS SDK V1
<a name="CodeSamples.Java.RegionAndEndpoint.V1"></a>

```
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration("http://localhost:8000", "us-west-2"))
.build();
```

### AWS SDK V2
<a name="CodeSamples.Java.RegionAndEndpoint.V2"></a>

```
DynamoDbClient client = DynamoDbClient.builder()
    .endpointOverride(URI.create("http://localhost:8000"))
    // The region is meaningless for local DynamoDb but required for client builder validation
    .region(Region.US_EAST_1)
    .credentialsProvider(StaticCredentialsProvider.create(
    AwsBasicCredentials.create("dummy-key", "dummy-secret")))
    .build();
```

# .NET-Codebeispiele
<a name="CodeSamples.DotNet"></a>

**Topics**
+ [

## .NET: Ihre Anmeldeinformationen einrichten AWS
](#CodeSamples.DotNet.Credentials)
+ [

## .NET: AWS Region und Endpunkt festlegen
](#CodeSamples.DotNet.RegionAndEndpoint)

Dieses Handbuch enthält.NET-Codefragmente und -Programme. ready-to-run Sie finden diese Codebeispiele in den folgenden Abschnitten:
+ [Arbeiten mit Elementen und Attributen in DynamoDB](WorkingWithItems.md)
+ [Arbeiten mit Tabellen und Daten in DynamoDB](WorkingWithTables.md)
+ [Abfragen von Tabellen in DynamoDB](Query.md)
+ [Scannen von Tabellen in DynamoDB](Scan.md)
+ [Verbessern des Datenzugriffs mit sekundären Indizes in DynamoDB](SecondaryIndexes.md)
+ [Arbeiten dem .NET-Dokumentmodell in DynamoDB](DotNetSDKMidLevel.md)
+ [Arbeiten mit dem Object Persistence-Modell von .NET und DynamoDB](DotNetSDKHighLevel.md)
+ [Ändern Sie die Datenerfassung für DynamoDB Streams](Streams.md)

Sie können schnell loslegen, indem Sie das AWS SDK für .NET mit dem Toolkit for Visual Studio verwenden.

**So führen Sie die .NET-Codebeispiele (mit Visual Studio) aus**

1. Laden Sie [Microsoft Visual Studio](https://www.visualstudio.com) herunter und installieren Sie es.

1. (Optional) Laden Sie das [Toolkit for Visual Studio](https://aws.amazon.com/visualstudio/) herunter und installieren Sie es.

1. Richten Sie Ihre AWS Anmeldeinformationen ein. Konfigurieren Sie ein Profil mit Anmeldeinformationen in Ihrer Datei mit gemeinsam genutzten AWS Anmeldeinformationen (`~/.aws/credentials`). Weitere Informationen finden Sie unter [Configure AWS credentials (Konfigurieren von AWS -Anmeldeinformationen)](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html) im *AWS SDK für .NET -Entwicklerhandbuch*.

1. Starten Sie Visual Studio. Wählen Sie **File (Datei)**, **New (Neu)** und **Project (Projekt)** aus.

1. Suchen Sie nach **Console App**, wählen Sie die C\$1-Vorlage aus, die auf .NET abzielt, und klicken Sie dann auf **Weiter**. Konfigurieren Sie den Namen und den Speicherort Ihres Projekts und wählen Sie dann **Create** aus.

1. Fügen Sie das AWS SDK für NuGet DynamoDB-Paket zu Ihrem Projekt hinzu:

   1. Öffnen Sie im Solution Explorer das Kontextmenü (mit der rechten Maustaste) für Ihr Projekt und wählen Sie dann Pakete **verwalten NuGet** aus.

   1. Wählen Sie im NuGet Package Manager die Option **Durchsuchen** aus.

   1. Geben Sie im Suchfeld **AWSSDK.DynamoDBv2** ein und warten Sie, bis die Suche abgeschlossen ist.

   1. **Wählen Sie **AWSSDK.Dynamo DBv2** und dann Installieren.**

1. Öffnen Sie in Ihrem Visual Studio-Projekt. `Program.cs` Ersetzen Sie den Inhalt durch das Codebeispiel auf der Dokumentationsseite, das Sie ausführen möchten.

1. Wählen Sie auf der Visual Studio-Symbolleiste die Schaltfläche **Start (Starten)** aus, um den Code auszuführen.

Der SDK für .NET bietet Thread-sichere Clients für die Arbeit mit DynamoDB. Als bewährte Methode sollten Ihre Anwendungen einen Client erstellen und diesen zwischen den Threads wiederverwenden.

Weitere Informationen finden Sie unter [AWS SDK for .NET](https://aws.amazon.com/sdk-for-net).

**Anmerkung**  
Die Codebeispiele in diesem Handbuch sind für die Verwendung mit der neuesten Version des AWS SDK für .NET vorgesehen.

## .NET: Ihre Anmeldeinformationen einrichten AWS
<a name="CodeSamples.DotNet.Credentials"></a>

Das SDK für .NET erfordert, dass Sie zur Laufzeit AWS Anmeldeinformationen für Ihre Anwendung angeben. Bei den Codebeispielen in diesem Handbuch wird davon ausgegangen, dass Sie den SDK Store zur Verwaltung Ihrer AWS Anmeldeinformationsdatei verwenden, wie [unter Verwenden des AWS SDK für .NET SDK-Speichers](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html#sdk-store) *im Entwicklerhandbuch* beschrieben.

Toolkit for Visual Studio unterstützt mehrere Gruppen von Anmeldeinformationen aus einer beliebigen Anzahl von Konten. Jede Gruppe wird als *profile* bezeichnet. Visual Studio fügt der `App.config` Projektdatei Einträge hinzu, sodass Ihre Anwendung die AWS Anmeldeinformationen zur Laufzeit finden kann.

Das folgende Beispiel zeigt die `App.config`-Standarddatei, die bei der Erstellung eines neuen Projekts mit Toolkit for Visual Studio generiert wird.

```
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
    <add key="AWSProfileName" value="default"/>
    <add key="AWSRegion" value="us-west-2" />
 </appSettings>
</configuration>
```

Zur Laufzeit verwendet das `default` Programm die im `AWSProfileName` Eintrag angegebenen AWS Anmeldeinformationen. Die AWS Anmeldeinformationen selbst werden in verschlüsselter Form im SDK-Speicher gespeichert. Das Toolkit for Visual Studio bietet eine grafische Benutzeroberfläche, um Ihre Anmeldeinformationen vollständig über Visual Studio zu verwalten. Weitere Informationen finden Sie unter [Anmeldeinformationen angeben](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/tkv_setup.html#creds) im *AWS Toolkit for Visual Studio -Benutzerleitfaden*.

**Anmerkung**  
Standardmäßig greifen die Codebeispiele auf DynamoDB in der Region USA West (Oregon) auf. Sie können die Region ändern, indem Sie den `AWSRegion`-Eintrag in der Datei App.config ändern. Sie können `AWSRegion` auf jede Region festlegen, in der DynamoDB verfügbar ist. Die vollständige Liste finden Sie unter [AWS -Regionen und -Endpunkte](https://docs.aws.amazon.com/general/latest/gr/rande.html#ddb_region) in der *Allgemeine Amazon Web Services-Referenz*.

## .NET: AWS Region und Endpunkt festlegen
<a name="CodeSamples.DotNet.RegionAndEndpoint"></a>

Standardmäßig greifen die Codebeispiele auf DynamoDB in der Region USA West (Oregon) auf. Sie können die Region ändern, indem Sie den `AWSRegion`-Eintrag in der Datei `App.config` ändern. Sie können auch die Region ändern, indem Sie die `AmazonDynamoDBClient`-Eigenschaften ändern.

Im folgenden Codebeispiel wird ein neuer `AmazonDynamoDBClient` instanziiert. Der Client wird so geändert, dass der Code für DynamoDB in einer anderen Region ausgeführt wird.

```
AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig();
// This client will access the US East 1 region.
clientConfig.RegionEndpoint = RegionEndpoint.USEast1;
AmazonDynamoDBClient client = new AmazonDynamoDBClient(clientConfig);
```

Die vollständige Liste der Regionen finden Sie unter [AWS -Regionen und -Endpunkte](https://docs.aws.amazon.com/general/latest/gr/rande.html#ddb_region) in der *Allgemeine Amazon Web Services-Referenz*.

Wenn Sie die Codebeispiele mit DynamoDB lokal auf Ihrem Computer ausführen möchten, müssen Sie den Endpunkt wie folgt festlegen.

```
AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig();
// Set the endpoint URL
clientConfig.ServiceURL = "http://localhost:8000";
AmazonDynamoDBClient client = new AmazonDynamoDBClient(clientConfig);
```

# DynamoDB Low-Level-API
<a name="Programming.LowLevelAPI"></a>

Die Amazon-DynamoDB-*Low-Level-API* ist die Schnittstelle auf Protokollebene für DynamoDB. Auf dieser Ebene muss jede HTTP(S)-Anforderung ordnungsgemäß formatiert sein und eine gültige digitale Signatur aufweisen.

Sie AWS SDKs erstellen DynamoDB-API-Anfragen auf niedriger Ebene in Ihrem Namen und verarbeiten die Antworten von DynamoDB. So können Sie sich auf Ihre Anwendungslogik konzentrieren und müssen sich nicht mit Einzelheiten der unteren Ebene aufhalten. Dennoch ist es hilfreich, grundlegende Kenntnisse darüber zu haben, wie die DynamoDB-API auf niedriger Ebene funktioniert.

Weitere Informationen zur DynamoDB-Low-Level-API finden Sie unter [Amazon-DynamoDB-API-Referenz](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/).

**Anmerkung**  
DynamoDB Streams verfügt über eine eigene Low-Level-API, die von der von DynamoDB getrennt ist und vollständig von der unterstützt wird. AWS SDKs  
Weitere Informationen finden Sie unter [Ändern Sie die Datenerfassung für DynamoDB Streams](Streams.md). Informationen zur DynamoDB Streams-API auf niedriger Ebene finden Sie in der [Amazon-DynamoDB-Streams-API-Referenz](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations_Amazon_DynamoDB_Streams.html).

Die DynamoDB-API auf niedriger Ebene verwendet JavaScript Object Notation (JSON) als Wire-Protokollformat. JSON stellt Daten in einer Hierarchie dar, sodass Datenwerte und Datenstruktur gleichzeitig übermittelt werden. Name-Wert-Paare werden im Format `name:value` definiert. Die Datenhierarchie wird durch verschachtelte Klammern von Name-Wert-Paaren definiert.

DynamoDB verwendet JSON nur als Transportprotokoll, nicht als Speicherformat. AWS SDKs Sie verwenden JSON, um Daten an DynamoDB zu senden, und DynamoDB antwortet mit JSON. DynamoDB speichert Daten nicht dauerhaft im JSON-Format.

**Anmerkung**  
Weitere Informationen zu JSON finden Sie in der [Einführung zu JSON](http://json.org) auf der Website `JSON.org`.

**Topics**
+ [

## Anforderungsformat
](#Programming.LowLevelAPI.RequestFormat)
+ [

## Reaktionsformat
](#Programming.LowLevelAPI.ResponseFormat)
+ [

## Datentypbeschreibungen
](#Programming.LowLevelAPI.DataTypeDescriptors)
+ [

## Numerische Daten
](#Programming.LowLevelAPI.Numbers)
+ [

## Binäre Daten
](#Programming.LowLevelAPI.Binary)

![\[DynamoDB-Low-Level-API und wie AWS SDKs mit Anfragen und Antworten auf Protokollebene umgegangen wird.\]](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/SDKSupport.DDBLowLevelAPI.png)


## Anforderungsformat
<a name="Programming.LowLevelAPI.RequestFormat"></a>

Die DynamoDB-Low-Level-API akzeptiert HTTP(S)-`POST`-Anforderungen als Eingabe. Sie AWS SDKs erstellen diese Anfragen für Sie.

Angenommen, Sie verfügen über eine Tabelle namens `Pets` mit einem Schlüsselschema bestehend aus `AnimalType` (Partitionsschlüssel) und `Name` (Sortierschlüssel). Beide Attribute sind vom Typ `string`. Um ein Element von abzurufen`Pets`, erstellt das AWS SDK die folgende Anfrage.

```
POST / HTTP/1.1
Host: dynamodb.<region>.<domain>;
Accept-Encoding: identity
Content-Length: <PayloadSizeBytes>
User-Agent: <UserAgentString>
Content-Type: application/x-amz-json-1.0
Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>
X-Amz-Date: <Date> 
X-Amz-Target: DynamoDB_20120810.GetItem

{
    "TableName": "Pets",
    "Key": {
        "AnimalType": {"S": "Dog"},
        "Name": {"S": "Fido"}
    }
}
```

Beachten Sie bei dieser Anforderung Folgendes:
+ Der Header `Authorization` enthält Informationen, die DynamoDB benötigt, um die Anforderung zu authentifizieren. Weitere Informationen finden Sie unter [Signieren von AWS API-Anfragen](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html) und [Signiervorgang für Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) in der *Allgemeine Amazon Web Services-Referenz*.
+ Der Header `X-Amz-Target` enthält den Namen einer DynamoDB-Operation: `GetItem`. (Ebenfalls enthalten ist die Version der API auf niedriger Ebene, in diesem Fall `20120810`.)
+ Die Nutzlast (der Text) der Anforderung enthält die Parameter für die Operation im JSON-Format. Für die Operation `GetItem` lauten die Parameter `TableName` und `Key`.

## Reaktionsformat
<a name="Programming.LowLevelAPI.ResponseFormat"></a>

Nach Eingang der Anforderung wird diese von DynamoDB verarbeitet und der Service gibt eine Antwort zurück. Bei der zuvor gezeigten Anforderung enthält die Nutzlast der HTTP(S)-Antwort die Ergebnisse aus der Operation wie in dem folgenden Beispiel gezeigt.

```
HTTP/1.1 200 OK
x-amzn-RequestId: <RequestId>
x-amz-crc32: <Checksum>
Content-Type: application/x-amz-json-1.0
Content-Length: <PayloadSizeBytes>
Date: <Date>
{
    "Item": {
        "Age": {"N": "8"},
        "Colors": {
            "L": [
                {"S": "White"},
                {"S": "Brown"},
                {"S": "Black"}
            ]
        },
        "Name": {"S": "Fido"},
        "Vaccinations": {
            "M": {
                "Rabies": {
                    "L": [
                        {"S": "2009-03-17"},
                        {"S": "2011-09-21"},
                        {"S": "2014-07-08"}
                    ]
                },
                "Distemper": {"S": "2015-10-13"}
            }
        },
        "Breed": {"S": "Beagle"},
        "AnimalType": {"S": "Dog"}
    }
}
```

Zu diesem Zeitpunkt sendet das AWS SDK die Antwortdaten zur weiteren Verarbeitung an Ihre Anwendung zurück.

**Anmerkung**  
Wenn DynamoDB eine Anforderung nicht verarbeiten kann, gibt der Service einen HTTP-Fehlercode mit einer entsprechenden Meldung zurück. Das AWS -SDK überträgt diese an Ihre Anwendung in Form von Ausnahmen. Weitere Informationen finden Sie unter [Fehlerbehandlung mit DynamoDB](Programming.Errors.md).

## Datentypbeschreibungen
<a name="Programming.LowLevelAPI.DataTypeDescriptors"></a>

Das Low-Level-DynamoDB-API-Protokoll erfordert, dass jedes Attribut von einem Datentypdeskriptor begleitet wird. *Datentypdeskriptoren* sind Token, die DynamoDB mitteilen, wie jedes Attribut zu interpretieren ist.

Die Beispiele unter [Anforderungsformat](#Programming.LowLevelAPI.RequestFormat) und [Reaktionsformat](#Programming.LowLevelAPI.ResponseFormat) zeigen, wie Datentypbeschreibungen verwendet werden. Die `GetItem`-Anforderung gibt `S` für die `Pets`-Schlüsselschemaattribute an (`AnimalType` und `Name`, vom Typ `string`). Die `GetItem`-Antwort enthält ein *Pets*-Element mit Attributen vom Typ `string` (`S`), `number` (`N`), `map` (`M`) und `list` (`L`).

Im Folgenden sehen Sie eine vollständige Liste der DynamoDB-Datentypbeschreibungen:
+ **`S`** – Zeichenfolge
+ **`N`** – Zahl
+ **`B`** – Binary
+ **`BOOL`** – Boolean
+ **`NULL`** – Nullwert
+ **`M`** – Zuordnung
+ **`L`** – Liste
+ **`SS`** – Zeichenfolgensatz
+ **`NS`** – Zahlensatz
+ **`BS`** – Binärzahlensatz

Die folgende Tabelle zeigt das richtige JSON-Format für jeden Datentypdeskriptor. Beachten Sie, dass Zahlen aus Gründen der Genauigkeit als Zeichenketten dargestellt werden, während boolesche Werte und Nullen ihre nativen JSON-Typen verwenden.


| Deskriptor | JSON-Format | Hinweise | 
| --- | --- | --- | 
| S | \$1"S": "Hello"\$1 | Der Wert ist eine JSON-Zeichenfolge. | 
| N | \$1"N": "123.45"\$1 | Der Wert ist eine Zeichenfolge, keine JSON-Nummer. Dadurch bleibt die Präzision in allen Sprachen erhalten. | 
| B | \$1"B": "dGhpcyBpcyBhIHRlc3Q="\$1 | Der Wert ist eine Base64-kodierte Zeichenfolge. | 
| BOOL | \$1"BOOL": true\$1 | Der Wert ist ein boolescher JSON-Wert (trueoderfalse), keine Zeichenfolge. | 
| NULL | \$1"NULL": true\$1 | Value ist der boolesche JSON-Wert, der Null angibttrue. | 
| M | \$1"M": \$1"Name": \$1"S": "Joe"\$1\$1\$1 | Value ist ein JSON-Objekt mit Attributname-Wert-Paaren. | 
| L | \$1"L": [\$1"S": "Red"\$1, \$1"N": "5"\$1]\$1 | Value ist ein JSON-Array von Attributwerten. | 
| SS | \$1"SS": ["Red", "Blue"]\$1 | Value ist ein JSON-Array von Zeichenketten. | 
| NS | \$1"NS": ["1", "2.5"]\$1 | Value ist ein JSON-Array von Zahlenzeichenfolgen. | 
| BS | \$1"BS": ["U3Vubnk=", "UmFpbnk="]\$1 | Value ist ein JSON-Array von Base64-codierten Zeichenketten. | 

**Anmerkung**  
 Detaillierte Beschreibungen von DynamoDB-Datentypen finden Sie unter [Datentypen](HowItWorks.NamingRulesDataTypes.md#HowItWorks.DataTypes).

## Numerische Daten
<a name="Programming.LowLevelAPI.Numbers"></a>

Die unterschiedlichen Programmiersprachen bieten verschiedene Ebenen der Unterstützung für JSON. In einigen Fällen möchten Sie möglicherweise eine Drittanbieterbibliothek zum Validieren und Parsen von JSON-Dokumenten verwenden.

Einige Drittanbieterbibliotheken bieten basierend auf dem JSON-Nummerntyp eigene Typen wie z. B. `int`, `long` oder `double` an. Der native Zahlendatentyp in DynamoDB ist diesen Datentypen nicht exakt zuordenbar, sodass es bei Unterschieden zu Konflikten kommen kann. Außerdem verarbeiten viele JSON-Bibliotheken keine numerischen Werte mit fester Präzision und leiten automatisch einen Double-Datentyp für Ziffernfolgen ab, die ein Dezimaltrennzeichen enthalten.

Um diese Art von Problemen zu lösen, stellt DynamoDB einen einzigen numerischen Typ ohne Datenverluste bereit. Um unerwünschte implizite Umwandlungen in einen Double-Wert zu verhindern, verwendet DynamoDB Zeichenfolgen für die Datenübertragung von numerischen Werten. Dieser Ansatz bietet Flexibilität bei der Aktualisierung von Attributwerten und sorgt außerdem für eine korrekte Sortiersemantik (z. B. werden die Werte "01", "2" und "03" in die richtige Reihenfolge gebracht).

Wenn für Ihre Anwendung die Zahlengenauigkeit wichtig ist, sollten Sie numerische Werte in Zeichenfolgen konvertieren, bevor Sie sie an DynamoDB übergeben.

## Binäre Daten
<a name="Programming.LowLevelAPI.Binary"></a>

DynamoDB unterstützt binäre Attribute. JSON bietet für binäre Daten jedoch keine native Unterstützung. Um binäre Daten in einer Anforderung zu senden, müssen Sie sie im base64-Format kodieren. Nach Eingang der Anforderung werden die base64-Daten von DynamoDB zurück in binäre Daten dekodiert. 

Das von DynamoDB verwendete base64-Codierungsschema wird unter [RFC 4648](http://tools.ietf.org/html/rfc4648) auf der Website der Internet Engineering Task Force (IETF) beschrieben.