포스트

spring mongodb repository

spring mongodb repository

이 글은 Tistory에서 이전된 포스팅입니다. 원본은 여기에서 확인할 수 있습니다.

mongodb connecting

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

authentication admin 설정 없을 시, authentication 관련 예외가 발생했다.

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);
}

repository 형태로 사용할 경우 properties에서 정의된 값으로 spring container에 자동으로 bean을 등록한다.

spring mongodb template

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Docs 예시
@Configuration
class AppConfig {

  @Bean
  MongoClient mongoClient() {
      return MongoClients.create("mongodb://localhost:27017");
  }

  @Bean
  MongoTemplate mongoTemplate(MongoClient mongoClient) {
      return new MongoTemplate(mongoClient, "geospatial");
  }
}

MongoTemplate 의 경우 Configuration에서 직접 bean을 등록한다.

기본 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 는 _id 중복시 예외
        //save 는 _id 중복시 update
    }

    @DisplayName("findTest")
    @Test
    public void findTest() {
        List<MongoTestEntity> findList = mongoTestRepository.findByFirstName("choi");
    }
}

spring mongodb에서 transaction을 사용하려면 TransactionManager/Template 등의 추가 bean등록이 필요하다.

spring mongodb은 동기로 동작하고 비동기로 사용하려면 mongodb-reactive를 사용한다.

참고 자료

https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.repositories

https://www.baeldung.com/spring-data-mongodb-connection

https://jh2021.tistory.com/24

https://ckddn9496.tistory.com/100

이 기사는 저작권자의 CC BY-NC 4.0 라이센스를 따릅니다.