@@ -43,150 +43,135 @@ Download the JAR though [Maven Central](http://mvnrepository.com/artifact/com.gi
4343
4444Setup DynamoDB configuration as well as enabling Spring-Data DynamoDB repository support via Annotation ([ XML-based configuration] ( wiki/Quick-Start---XML-based-configuration ) )
4545
46+ Create a DynamoDB entity [ User] ( https://github.com/derjust/spring-data-dynamodb-examples/blob/master/src/main/java/com/github/derjust/spring_data_dynamodb_examples/simple/User.java ) for this table:
47+
4648``` java
47- @Configuration
48- @EnableDynamoDBRepositories (basePackages = " com.acme.repositories" )
49- public class DynamoDBConfig {
49+ @DynamoDBTable (tableName = " User" )
50+ public class User {
5051
51- @Value (" ${amazon.dynamodb.endpoint}" )
52- private String amazonDynamoDBEndpoint;
52+ private String id;
53+ private String firstName;
54+ private String lastName;
5355
54- @Value (" ${amazon.aws.accesskey}" )
55- private String amazonAWSAccessKey;
56+ public User () {
57+ // Default constructor is required by AWS DynamoDB SDK
58+ }
5659
57- @Value (" ${amazon.aws.secretkey}" )
58- private String amazonAWSSecretKey;
60+ public User (String firstName , String lastName ) {
61+ this . firstName = firstName;
62+ this . lastName = lastName;
63+ }
5964
60- @Bean
61- public AmazonDynamoDB amazonDynamoDB (AWSCredentials amazonAWSCredentials ) {
62- AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient (amazonAWSCredentials);
65+ @DynamoDBHashKey
66+ @DynamoDBAutoGeneratedKey
67+ public String getId () {
68+ return id;
69+ }
6370
64- if (StringUtils . isNotEmpty(amazonDynamoDBEndpoint)) {
65- amazonDynamoDB. setEndpoint(amazonDynamoDBEndpoint);
66- }
67- return amazonDynamoDB;
71+ @DynamoDBAttribute
72+ public String getFirstName () {
73+ return firstName;
6874 }
6975
70- @Bean
71- public AWSCredentials amazonAWSCredentials () {
72- // Or use an AWSCredentialsProvider/AWSCredentialsProviderChain
73- return new BasicAWSCredentials (amazonAWSAccessKey, amazonAWSSecretKey);
76+ @DynamoDBAttribute
77+ public String getLastName () {
78+ return lastName;
7479 }
7580
81+ // setter & hashCode & equals
7682}
7783```
7884
79- Create a DynamoDB entity for this table :
85+ Create a CRUD repository interface [ UserRepository ] ( https://github.com/derjust/spring-data-dynamodb-examples/blob/master/src/main/java/com/github/derjust/spring_data_dynamodb_examples/simple/UserRepository.java ) :
8086
8187``` java
82- @DynamoDBTable (tableName = " User" )
83- public class User {
84-
85- private String id;
86- private String firstName;
87- private String lastName;
88-
89- @DynamoDBHashKey
90- @DynamoDBAutoGeneratedKey
91- public String getId () {
92- return id;
93- }
94-
95- @DynamoDBAttribute
96- public String getFirstName () {
97- return firstName;
98- }
99-
100- @DynamoDBAttribute
101- public String getLastName () {
102- return lastName;
103- }
104-
105- public void setId (String id ) {
106- this . id = id;
107- }
108-
109- public void setFirstName (String firstName ) {
110- this . firstName = firstName;
111- }
112-
113- public void setLastName (String lastName ) {
114- this . lastName = lastName;
115- }
88+ @EnableScan
89+ public interface UserRepository extends CrudRepository<User , String > {
90+ List<User > findByLastName (String lastName );
11691}
11792```
11893
119- Create a CRUD repository interface in ` com.acme.repositories ` :
94+ or for paging and sorting...
12095
12196``` java
122- package com.acme.repositories ;
97+ public interface PagingUserRepository extends PagingAndSortingRepository<User , String > {
98+ Page<User > findByLastName (String lastName , Pageable pageable );
12399
124- @EnableScan
125- public interface UserRepository extends CrudRepository< User , String > {
126- List <User > findByLastName ( String lastName );
100+ @EnableScan
101+ @EnableScanCount
102+ Page <User > findAll ( Pageable pageable );
127103}
128104```
129105
130- or for paging and sorting...
131-
106+ Create the configuration class [ DynamoDBConfig] ( https://github.com/derjust/spring-data-dynamodb-examples/blob/master/src/test/java/com/github/derjust/spring_data_dynamodb_examples/simple/UserRepositoryIT.java#L61 ) :
132107``` java
133- package com.acme.repositories ;
134-
135- public interface UserRepository extends PagingAndSortingRepository<User , String > {
136- Page<User > findByLastName (String lastName ,Pageable pageable );
137-
138- @EnableScan
139- @EnableScanCount
140- Page<User > findAll (Pageable pageable );
108+ @Configuration
109+ @EnableDynamoDBRepositories (basePackageClasses = UserRepository . class)
110+ public static class DynamoDBConfig {
111+
112+ @Value (" ${amazon.aws.accesskey}" )
113+ private String amazonAWSAccessKey;
114+
115+ @Value (" ${amazon.aws.secretkey}" )
116+ private String amazonAWSSecretKey;
117+
118+ public AWSCredentialsProvider amazonAWSCredentialsProvider () {
119+ return new AWSStaticCredentialsProvider (amazonAWSCredentials());
120+ }
121+
122+ @Bean
123+ public AWSCredentials amazonAWSCredentials () {
124+ return new BasicAWSCredentials (amazonAWSAccessKey, amazonAWSSecretKey);
125+ }
126+
127+ @Bean
128+ public DynamoDBMapperConfig dynamoDBMapperConfig () {
129+ return DynamoDBMapperConfig . DEFAULT ;
130+ }
131+
132+ @Bean
133+ public DynamoDBMapper dynamoDBMapper (AmazonDynamoDB amazonDynamoDB , DynamoDBMapperConfig config ) {
134+ return new DynamoDBMapper (amazonDynamoDB, config);
135+ }
136+
137+ @Bean
138+ public AmazonDynamoDB amazonDynamoDB () {
139+ return AmazonDynamoDBClientBuilder . standard(). withCredentials(amazonAWSCredentialsProvider())
140+ .withRegion(Regions . US_EAST_1 ). build();
141+ }
141142}
142143```
143144
144- And finally write a test client
145+ And finally write a test client [ UserRepositoryIT ] ( https://github.com/derjust/spring-data-dynamodb-examples/blob/master/src/test/java/com/github/derjust/spring_data_dynamodb_examples/simple/UserRepositoryIT.java ) :
145146
146147``` java
147- @RunWith (SpringJUnit4ClassRunner . class)
148- @SpringApplicationConfiguration (classes = {
149- PropertyPlaceholderAutoConfiguration . class, DynamoDBConfig . class})
150- public class UserRepositoryIntegrationTest {
151-
152- @Autowired
153- UserRepository repository;
154-
155- @Test
156- public void sampleTestCase () {
157- User dave = new User (" Dave" , " Matthews" );
158- repository. save(dave);
159-
160- User carter = new User (" Carter" , " Beauford" );
161- repository. save(carter);
162-
163- List<User > result = repository. findByLastName(" Matthews" );
164- Assert . assertThat(result. size(), is(1 ));
165- Assert . assertThat(result, hasItem(dave));
166- }
167-
168- private static final long CAPACITY = 5L ;
169-
170- @Autowired
171- private AmazonDynamoDB amazonDynamoDB;
172-
173- @Before
174- public void init () throws Exception {
175- // Delete User table in case it exists
176- amazonDynamoDB. listTables(). getTableNames(). stream().
177- filter(tableName - > tableName. equals(User . TABLE_NAME )). forEach(tableName - > {
178- amazonDynamoDB. deleteTable(tableName);
179- });
148+ @RunWith (SpringRunner . class)
149+ @SpringBootTest (classes = { PropertyPlaceholderAutoConfiguration . class, DynamoDBConfig . class })
150+ public class UserRepositoryIT {
151+ private static final Logger log = LoggerFactory . getLogger(UserRepositoryIT . class);
180152
181- // Create User table
182- amazonDynamoDB. createTable(new DynamoDBMapper (amazonDynamoDB)
183- .generateCreateTableRequest(User . class)
184- .withProvisionedThroughput(new ProvisionedThroughput (CAPACITY , CAPACITY )));
185- }
186-
153+ @Autowired
154+ private UserRepository repository;
155+
156+ @Test
157+ public void sampleTestCase () {
158+ User gosling = new User (" James" , " Gosling" );
159+ repository. save(gosling);
160+
161+ User hoeller = new User (" Juergen" , " Hoeller" );
162+ repository. save(hoeller);
163+
164+ List<User > result = repository. findByLastName(" Gosling" );
165+ Assert . assertThat(result. size(), is(1 ));
166+ Assert . assertThat(result, hasItem(gosling));
167+ log. info(" Found in table: {}" , result. get(0 ));
168+ }
169+
170+ // setup code
187171}
188172```
189173
174+ The full source code is available at [ spring-data-dynamodb-examples' simple example] ( https://github.com/derjust/spring-data-dynamodb-examples/blob/master/README-simple.md )
190175
191176## More
192177More sample code can be found in the [ spring-data-dynamodb-examples] ( https://github.com/derjust/spring-data-dynamodb-examples ) project.
0 commit comments