
Aws Sdk Java V2 Dynamodb
Implement advanced AWS DynamoDB queries, scans, filters, and projections with the Java SDK v2 Enhanced Client patterns.
Overview
AWS SDK Java v2 DynamoDB is an agent skill for the Build phase that references QueryConditional, filter/projection expressions, and paginated scans for DynamoDB using the Java Enhanced Client.
Install
npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill aws-sdk-java-v2-dynamodbWhat is this skill?
- QueryConditional patterns: keyEqualTo, sortBetween, sortKeyBeginsWith
- Filter expressions with expression names and AttributeValue placeholders
- Projection expressions to limit returned attributes on query/scan
- ScanEnhancedRequest pagination for large table walks
- AWS SDK for Java v2 DynamoDB Enhanced Client code-oriented reference
Adoption & trust: 1.1k installs on skills.sh; 271 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need correct Java v2 DynamoDB query and scan code with filters and projections but keep mixing key conditions or expression attribute syntax.
Who is it for?
Solo builders shipping Java or Kotlin APIs on AWS who store data in DynamoDB and want copy-paste-correct SDK v2 patterns.
Skip if: Python/Node DynamoDB stacks, DynamoDB table design from scratch, or teams only needing Terraform table provisioning.
When should I use this skill?
Implementing or debugging DynamoDB query, scan, filter, or projection code with AWS SDK for Java 2.x.
What do I get? / Deliverables
Agents produce Enhanced Client requests with proper QueryConditional, Expression filters, projections, and scan pagination blocks.
- Query and scan request code blocks
- Filter and projection Expression builders
- Paginated scan request patterns
Recommended Skills
Journey fit
DynamoDB access patterns are core backend build work for JVM services storing orders, users, or events. Backend subphase covers partition/sort key conditionals, filter and projection expressions, and paginated scan/query requests.
How it compares
Java SDK v2 snippet reference—not a full CRUD scaffold generator or NoSQL modeling methodology skill.
Common Questions / FAQ
Who is aws-sdk-java-v2-dynamodb for?
Indie and small-team JVM backend developers on AWS who want coding agents to write DynamoDB Enhanced Client queries, filters, and scans accurately.
When should I use aws-sdk-java-v2-dynamodb?
Use it during Build backend work when implementing repository layers, date-range queries on sort keys, or efficient projections before Ship testing against real tables.
Is aws-sdk-java-v2-dynamodb safe to install?
The excerpt is code documentation; review the Security Audits panel on this Prism page for giuseppe-trisciuoglio/developer-kit before installing.
SKILL.md
READMESKILL.md - Aws Sdk Java V2 Dynamodb
# Advanced Operations Reference This document covers advanced DynamoDB operations and patterns. ## Query Operations ### Key Conditions #### Key.equalTo() ```java QueryConditional equalTo = QueryConditional .keyEqualTo(Key.builder() .partitionValue("customer123") .build()); ``` #### Key.between() ```java QueryConditional between = QueryConditional .sortBetween( Key.builder().partitionValue("customer123").sortValue("2023-01-01").build(), Key.builder().partitionValue("customer123").sortValue("2023-12-31").build()); ``` #### Key.beginsWith() ```java QueryConditional beginsWith = QueryConditional .sortKeyBeginsWith(Key.builder() .partitionValue("customer123") .sortValue("2023-") .build()); ``` ### Filter Expressions ```java Expression filter = Expression.builder() .expression("points >= :minPoints AND status = :status") .putExpressionName("#p", "points") .putExpressionName("#s", "status") .putExpressionValue(":minPoints", AttributeValue.builder().n("1000").build()) .putExpressionValue(":status", AttributeValue.builder().s("ACTIVE").build()) .build(); ``` ### Projection Expressions ```java Expression projection = Expression.builder() .expression("customerId, name, email") .putExpressionName("#c", "customerId") .putExpressionName("#n", "name") .putExpressionName("#e", "email") .build(); ``` ## Scan Operations ### Pagination ```java ScanEnhancedRequest request = ScanEnhancedRequest.builder() .limit(100) .build(); PaginatedScanIterable<Customer> results = table.scan(request); results.stream().forEach(page -> { // Process each page of results }); ``` ### Conditional Scan ```java Expression filter = Expression.builder() .expression("active = :active") .putExpressionValue(":active", AttributeValue.builder().bool(true).build()) .build(); return table.scan(r -> r .filterExpression(filter) .limit(50)) .items().stream() .collect(Collectors.toList()); ``` ## Batch Operations ### Batch Get with Unprocessed Keys ```java List<Key> keys = customerIds.stream() .map(id -> Key.builder().partitionValue(id).build()) .collect(Collectors.toList()); ReadBatch.Builder<Customer> batchBuilder = ReadBatch.builder(Customer.class) .mappedTableResource(table); keys.forEach(batchBuilder::addGetItem); BatchGetResultPageIterable result = enhancedClient.batchGetItem(r -> r.addReadBatch(batchBuilder.build())); // Handle unprocessed keys result.stream() .flatMap(page -> page.unprocessedKeys().entrySet().stream()) .forEach(entry -> { // Retry logic for unprocessed keys }); ``` ### Batch Write with Different Operations ```java WriteBatch.Builder<Customer> batchBuilder = WriteBatch.builder(Customer.class) .mappedTableResource(table); batchBuilder.addPutItem(customer1); batchBuilder.addDeleteItem(customer2); batchBuilder.addPutItem(customer3); enhancedClient.batchWriteItem(r -> r.addWriteBatch(batchBuilder.build())); ``` ## Transactions ### Conditional Writes ```java PutItemEnhancedRequest putRequest = PutItemEnhancedRequest.builder(table) .item(customer) .conditionExpression("attribute_not_exists(customerId)") .build(); table.putItemWithRequestBuilder(putRequest); ``` ### Multiple Table Operations ```java TransactWriteItemsEnhancedRequest request = TransactWriteItemsEnhancedRequest.builder() .addPutItem(customerTable, customer) .addPutItem(orderTable, order) .addUpdateItem(productTable, product) .addDeleteItem(cartTable, cartKey) .build(); enhancedClient.transactWriteItems(request); ``` ## Conditional Operations ### Condition Expressions ```java // Check if attribute exists .setAttribute("conditionExpression", "attribute_not_exists(customerId)") // Check attribute values .setAttribute("conditionExpression", "points > :currentPoints") .setAttribute("expressionAttributeValues", Map.of( ":currentPoints", AttributeValue