spring mongodb repository

cornpip
|2023. 10. 1. 16:04

mongodb connecting

// 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 정의

@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

public interface MongoTestRepository extends MongoRepository<MongoTestEntity, String> {
    public List<MongoTestEntity> findByFirstName(String firstName);
}

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

spring mongodb template

//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

@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

 

Spring Data MongoDB - Reference Documentation

abs, acos, acosh, add (* via plus), asin, asin, atan, atan2, atanh, ceil, cos, cosh, derivative, divide, exp, floor, integral, ln, log, log10, mod, multiply, pow, round, sqrt, subtract (* via minus), sin, sinh, tan, tanh, trunc

docs.spring.io

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

 

Spring Data MongoDB – Configure Connection | Baeldung

Different ways of setting up a MongoDB connection.

www.baeldung.com

https://jh2021.tistory.com/24

 

회사에서 Spring Boot + mongoDB 트랜잭션 도입하기

1. 왜 mongoDB에서 트랜잭션을 도입하는거야? 우선 업무에서 왜 mongoDB를 사용하고 있는지 부터 이야기 해야 할 것 같아요. 일반적인 회사에서는 관계형 데이터베이스를 사용하고 있는데, 제가 머물

jh2021.tistory.com

https://ckddn9496.tistory.com/100

 

MongoRepository를 이용한 MongoDB와 Spring boot 연동

SpringBoot와 MongoDB를 연결하고 MongoRepository를 사용해보자. 의존성 주입 pom.xml에 spring-boot-starter-data-mongodb를 추가합니다. org.springframework.boot spring-boot-starter-data-mongodb MongoDB 접속 정보 세팅 application.ym

ckddn9496.tistory.com

 

'Spring' 카테고리의 다른 글

spring mapstruct  (0) 2023.10.15
spring lombok SuperBuilder  (0) 2023.10.08
lombok @Builder  (0) 2023.08.06
Json 직렬/역직렬, @RequestBody, @ModelAttribute  (0) 2023.08.04
Spring boot DI 주입 방식 (필드/수정자/생성자)  (0) 2023.07.22