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
https://www.baeldung.com/spring-data-mongodb-connection
https://ckddn9496.tistory.com/100
'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 |