Spring MongoDB Repository
Spring MongoDB Repository
This post was migrated from Tistory. You can find the original here.
Connecting to MongoDB
1
2
3
4
5
6
7
8
// application.properties
spring.data.mongodb.host= ~~
spring.data.mongodb.port=27017
spring.data.mongodb.database=test
spring.data.mongodb.username=root
spring.data.mongodb.password=1234
spring.data.mongodb.authentication-database=admin
Without the authentication-database setting, I ran into an authentication-related exception.
Defining a Collection
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Document(collection = "testCollection")
@Getter
@Setter
@ToString
public class MongoTestEntity {
@Id
private String id;
private String firstName;
private String lastName;
public MongoTestEntity(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
Spring MongoDB Repository
1
2
3
public interface MongoTestRepository extends MongoRepository<MongoTestEntity, String> {
public List<MongoTestEntity> findByFirstName(String firstName);
}
When you use the repository style, Spring automatically registers a bean with the container using the values defined in application.properties.
Spring MongoDB Template
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Example from the docs
@Configuration
class AppConfig {
@Bean
MongoClient mongoClient() {
return MongoClients.create("mongodb://localhost:27017");
}
@Bean
MongoTemplate mongoTemplate(MongoClient mongoClient) {
return new MongoTemplate(mongoClient, "geospatial");
}
}
With MongoTemplate, you register the bean directly in the configuration class.
Basic CRUD Test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@SpringBootTest
class MongoTestRepositoryTest {
@Autowired
private MongoTestRepository mongoTestRepository;
@DisplayName("saveTest")
@Test
public void saveTest() {
MongoTestEntity mongoTestEntity = new MongoTestEntity("choi", "XX");
MongoTestEntity insertedEntity = mongoTestRepository.insert(mongoTestEntity);
}
@DisplayName("deleteTest")
@Test
public void deleteTest() {
List<MongoTestEntity> findList = mongoTestRepository.findByFirstName("choi");
mongoTestRepository.deleteAll(findList);
}
@DisplayName("updateTest")
@Test
public void updateTest() {
MongoTestEntity mongoTestEntity = new MongoTestEntity("jeon", "XX");
MongoTestEntity inserted = mongoTestRepository.insert(mongoTestEntity);
inserted.setFirstName("choi");
mongoTestRepository.save(inserted);
//insert throws an exception if the _id already exists
//save updates the document if the _id already exists
}
@DisplayName("findTest")
@Test
public void findTest() {
List<MongoTestEntity> findList = mongoTestRepository.findByFirstName("choi");
}
}
To use transactions with Spring MongoDB, you need to register additional beans such as a TransactionManager/Template.
Spring MongoDB operates synchronously by default; to use it asynchronously, use MongoDB Reactive instead.
References
https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.repositories
This post is licensed under CC BY-NC 4.0 by the author.
