T
- The type of model object that is being mapped to records in the DynamoDb table.@ThreadSafe public interface TableSchema<T>
AttributeValue
that is
understood by the DynamoDb low-level SDK and back again. This object is also expected to know about the
structure of the table it is modelling, which is stored in a TableMetadata
object.Modifier and Type | Method and Description |
---|---|
List<String> |
attributeNames()
Returns a complete list of attribute names that are mapped by this
TableSchema |
AttributeValue |
attributeValue(T item,
String attributeName)
Returns a single attribute value from the modelled object.
|
static <T> StaticTableSchema.Builder<T> |
builder(Class<T> itemClass)
Returns a builder for the
StaticTableSchema implementation of this interface which allows all attributes,
tags and table structure to be directly declared in the builder. |
static <T,B> StaticImmutableTableSchema.Builder<T,B> |
builder(Class<T> immutableItemClass,
Class<B> immutableBuilderClass)
Returns a builder for the
StaticImmutableTableSchema implementation of this interface which allows all
attributes, tags and table structure to be directly declared in the builder. |
default AttributeConverter<T> |
converterForAttribute(Object key)
AttributeConverter that is applied to the given key. |
static <T> BeanTableSchema<T> |
fromBean(Class<T> beanClass)
Scans a bean class that has been annotated with DynamoDb bean annotations and then returns a
BeanTableSchema implementation of this interface that can map records to and from items of that bean
class. |
static <T> TableSchema<T> |
fromClass(Class<T> annotatedClass)
Scans a class that has been annotated with DynamoDb enhanced client annotations and then returns an appropriate
TableSchema implementation that can map records to and from items of that class. |
static <T> ImmutableTableSchema<T> |
fromImmutableClass(Class<T> immutableClass)
Scans an immutable class that has been annotated with DynamoDb immutable annotations and then returns a
ImmutableTableSchema implementation of this interface that can map records to and from items of that
immutable class. |
boolean |
isAbstract()
A boolean value that represents whether this
TableSchema is abstract which means that it cannot be used
to directly create records as it is lacking required structural elements to map to a table, such as a primary
key, but can be referred to and embedded by other schemata. |
Map<String,AttributeValue> |
itemToMap(T item,
boolean ignoreNulls)
Takes a modelled object and converts it into a raw map of
AttributeValue that the DynamoDb low-level
SDK can work with. |
Map<String,AttributeValue> |
itemToMap(T item,
Collection<String> attributes)
Takes a modelled object and extracts a specific set of attributes which are then returned as a map of
AttributeValue that the DynamoDb low-level SDK can work with. |
EnhancedType<T> |
itemType()
Returns the
EnhancedType that represents the 'Type' of the Java object this table schema object maps to
and from. |
T |
mapToItem(Map<String,AttributeValue> attributeMap)
Takes a raw DynamoDb SDK representation of a record in a table and maps it to a Java object.
|
default T |
mapToItem(Map<String,AttributeValue> attributeMap,
boolean preserveEmptyObject)
Takes a raw DynamoDb SDK representation of a record in a table and maps it to a Java object.
|
TableMetadata |
tableMetadata()
Returns the object that describes the structure of the table being modelled by the mapper.
|
static <T> StaticTableSchema.Builder<T> builder(Class<T> itemClass)
StaticTableSchema
implementation of this interface which allows all attributes,
tags and table structure to be directly declared in the builder.T
- The type of the item this TableSchema
will map records to.itemClass
- The class of the item this TableSchema
will map records to.StaticTableSchema.Builder
.static <T,B> StaticImmutableTableSchema.Builder<T,B> builder(Class<T> immutableItemClass, Class<B> immutableBuilderClass)
StaticImmutableTableSchema
implementation of this interface which allows all
attributes, tags and table structure to be directly declared in the builder.T
- The type of the immutable item this TableSchema
will map records to.B
- The type of the builder used by this TableSchema
to construct immutable items with.immutableItemClass
- The class of the immutable item this TableSchema
will map records to.immutableBuilderClass
- The class that can be used to construct immutable items this TableSchema
maps records to.StaticImmutableTableSchema.Builder
static <T> BeanTableSchema<T> fromBean(Class<T> beanClass)
BeanTableSchema
implementation of this interface that can map records to and from items of that bean
class.
Creating a BeanTableSchema
is a moderately expensive operation, and should be performed sparingly. This is
usually done once at application startup.T
- The type of the item this TableSchema
will map records to.beanClass
- The bean class this TableSchema
will map records to.BeanTableSchema
.static <T> ImmutableTableSchema<T> fromImmutableClass(Class<T> immutableClass)
ImmutableTableSchema
implementation of this interface that can map records to and from items of that
immutable class.
Creating a ImmutableTableSchema
is a moderately expensive operation, and should be performed sparingly. This is
usually done once at application startup.T
- The type of the item this TableSchema
will map records to.immutableClass
- The immutable class this TableSchema
will map records to.ImmutableTableSchema
.static <T> TableSchema<T> fromClass(Class<T> annotatedClass)
TableSchema
implementation that can map records to and from items of that class. Currently supported
top level annotations (see documentation on those classes for more information on how to use them):
DynamoDbBean
DynamoDbImmutable
This is a moderately expensive operation, and should be performed sparingly. This is usually done once at
application startup.
If this table schema is not behaving as you expect, enable debug logging for
'software.amazon.awssdk.enhanced.dynamodb.beans'.
T
- The type of the item this TableSchema
will map records to.annotatedClass
- A class that has been annotated with DynamoDb enhanced client annotations.TableSchema
T mapToItem(Map<String,AttributeValue> attributeMap)
If attributes are missing from the map, that will not cause an error, however if attributes are found in the map which the mapper does not know how to map, an exception will be thrown.
If all attribute values in the attributeMap are null, null will be returned. Use mapToItem(Map, boolean)
instead if you need to preserve empty object.
API Implementors Note:
mapToItem(Map, boolean)
must be implemented if preserveEmptyObject
behavior is desired.
attributeMap
- A map of String to AttributeValue
that contains all the raw attributes to map.IllegalArgumentException
- if any attributes in the map could not be mapped onto the new model object.mapToItem(Map, boolean)
default T mapToItem(Map<String,AttributeValue> attributeMap, boolean preserveEmptyObject)
If attributes are missing from the map, that will not cause an error, however if attributes are found in the map which the mapper does not know how to map, an exception will be thrown.
In the scenario where all attribute values in the map are null, it will return null if preserveEmptyObject
is true. If it's false, an empty object will be returned.
Note that preserveEmptyObject
only applies to the top level Java object, if it has nested "empty" objects, they
will be mapped as null. You can use DynamoDbPreserveEmptyObject
to configure this behavior for nested objects.
API Implementors Note:
This method must be implemented if preserveEmptyObject
behavior is to be supported
attributeMap
- A map of String to AttributeValue
that contains all the raw attributes to map.preserveEmptyObject
- whether to initialize this Java object as empty class if all fields are nullIllegalArgumentException
- if any attributes in the map could not be mapped onto the new model object.UnsupportedOperationException
- if preserveEmptyObject
is not supported in the implementationmapToItem(Map)
Map<String,AttributeValue> itemToMap(T item, boolean ignoreNulls)
AttributeValue
that the DynamoDb low-level
SDK can work with.item
- The modelled Java object to convert into a map of attributes.ignoreNulls
- If set to true; any null values in the Java object will not be added to the output map.
If set to false; null values in the Java object will be added as AttributeValue
of
type 'nul' to the output map.AttributeValue
representing all the modelled attributes in the model object.Map<String,AttributeValue> itemToMap(T item, Collection<String> attributes)
AttributeValue
that the DynamoDb low-level SDK can work with. This method is typically used to extract
just the key attributes of a modelled item and will not ignore nulls on the modelled object.item
- The modelled Java object to extract the map of attributes from.attributes
- A collection of attribute names to extract into the output map.AttributeValue
representing the requested modelled attributes in the model
object.AttributeValue attributeValue(T item, String attributeName)
item
- The modelled Java object to extract the attribute from.attributeName
- The attribute name describing which attribute to extract.AttributeValue
representing the requested modelled attribute in the model object or
null if the attribute has not been set with a value in the modelled object.TableMetadata tableMetadata()
TableMetadata
object that contains structural information about the table being modelled.EnhancedType<T> itemType()
EnhancedType
that represents the 'Type' of the Java object this table schema object maps to
and from.EnhancedType
of the modelled item this TableSchema maps to.List<String> attributeNames()
TableSchema
boolean isAbstract()
TableSchema
is abstract which means that it cannot be used
to directly create records as it is lacking required structural elements to map to a table, such as a primary
key, but can be referred to and embedded by other schemata.default AttributeConverter<T> converterForAttribute(Object key)
AttributeConverter
that is applied to the given key.key
- Attribute of the modelled item.Copyright © 2022. All rights reserved.