2023. 4. 27. 01:34ㆍProject/memo
MongoTemplate은 Spring Data MongoDB에서 제공하는 MongoDB와의 상호작용을 담당하는 클래스다.
이를 통해MongoDB의 데이터를 생성, 조회, 수정, 삭제하는 CRUD 작업을 포함한 다양한 작업을 수행할 수 있다.
MongoTemplate은 MongoDB의 Java Driver를 기반으로 동작한다.
@Bean
fun mongoTemplate(mongoClient: MongoClient): MongoTemplate {
return MongoTemplate(mongoClient, "DBName")
}
MongodbConfig 클래스에 MongoTemplate을 return해 Bean으로 등록하는 메소드를 작성했다.
override fun find(userId : String, diaryId : String): Diary? {
val query = Query()
query.addCriteria(Criteria.where("userId").`is`(userId).and("diaryId").`is`(diaryId))
return mongoTemplate.findOne(query, Diary::class.java)
}
db repository의 구현체의 메소드를 작성했다. Query() 클래스의 객체로 query를 만들어야한다. 이는 Spring Data MongoDB에서 제공한다.
query의 문법이 특이해서 기록한다. Criteria라고 Spring Data MongoDB에서 제공하는 클래스를 이용해 query를 완성할 수 있다.
‘is’
is 는 코틀린에서 type check에 사용하는 연산자로 예약어다.
if (x is String)
이런식으로 사용한다.
따라서 예약어와 구분하기 위해 backtick (`)을 이용해서 감싸준다.
Diary::class.java
fiindOne 메소드는 Query 객체와 검색 대상 collection(MongoDB의 개념)의 클래스 타입을 인자로 받는다. 따라서 반환하려는 데이터의 타입(클래스)을 인자로 받아 반환 시 그 데이터 타입(클래스)의 인스턴스를 반환하게 된다.
위의 예시에서는 Diary가 코틀린으로 작성된 클래스이기 때문에 ::(멤버 참조 연산자)를 사용해 Diary의 java 클래스를 참조한다. 왜냐하면 java 클래스와 Kotlin 클래스는 다르게 컴파일되기 때문에 서로 완전히 호환되지 않을 수 있기 때문이다. 이번 경우는 MongoDB의 Java Driver을 사용할 때 호환 문제 때문에 java 클래스를 참조하는 처리를 해준다.
'Project > memo' 카테고리의 다른 글
spring-boot-devtools 사용 할 때 Response에서 stack 제외하기 (0) | 2024.01.19 |
---|---|
Mac 클립 보드 명령어 (2) | 2023.12.08 |
hosts 파일 수정해서 특정 사이트 차단하기 (0) | 2023.06.23 |
Mac 매직키보드 백틱(`) 입력하기 (0) | 2023.05.12 |