Skip to content

Commit 1331286

Browse files
authored
Merge pull request #207 from derjust/Issue_199
Issue #119: Fix incorrect `README.md`
2 parents 38d4aaf + b38266a commit 1331286

File tree

1 file changed

+95
-110
lines changed

1 file changed

+95
-110
lines changed

README.md

Lines changed: 95 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -43,150 +43,135 @@ Download the JAR though [Maven Central](http://mvnrepository.com/artifact/com.gi
4343

4444
Setup 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
192177
More sample code can be found in the [spring-data-dynamodb-examples](https://github.com/derjust/spring-data-dynamodb-examples) project.

0 commit comments

Comments
 (0)