1. 이전 포스팅
https://growingsaja.tistory.com/967
2. 목표
< 목표1 >
Repository interface에서 CrudRepository를 상속하는 기존 형태가 아니라 JpaRepository를 상속하는 형태를 권장하므로 본 포스팅에서는 권장사항을 적용해 소스코드를 수정합니다.
[ 권장 사유 ]
a. 더 많은 기능 제공합니다.
- JpaRepository는 CrudRepository를 확장하므로 CRUD 작업뿐만 아니라 페이징, 정렬, 동적 쿼리 생성 및 기타 JPA 관련 기능을 사용할 수 있습니다.
b. Spring Data JPA 특화 메서드입니다.
- JpaRepository는 Spring Data JPA에서 지원하는 특화된 메서드를 사용할 수 있도록 해줍니다. 이러한 메서드를 사용하면 복잡한 쿼리를 직접 작성하지 않고도 데이터베이스 조작이 가능합니다.
< 목표2 >
H2, MongoDB 이렇게 2개 db를 본 프로젝트에서 사용하는 api 서버 1개에서 모두 연동해 접근할 수 있도록 설정하기 위해, 소스코드를 수정합니다.
import org.springframework.data.mongodb.repository.MongoRepository
3. H2 database 사용하는 Coffee 레포지토리 수정
// vim CoffeeRepository.kt
package com.example.practicekopring.repositories
import com.example.practicekopring.entities.Coffee
import org.springframework.data.jpa.repository.Query
// Spring Data JPA에서 사용하는 쿼리 어노테이션을 가져옵니다.
import org.springframework.data.jpa.repository.JpaRepository
// Spring Data Repository의 기본 기능을 제공하는 CrudRepository를 가져옵니다.
// CrudRepository에서는 findAll(), findById(), save(), deleteById() 등의 크루드(기본 CRUD) 작업을 자동으로 지원하므로 이를 활용할 수 있습니다.
interface CoffeeRepository : JpaRepository<Coffee, Int> {
// CoffeeRepository 인터페이스를 정의하며, Coffee 엔터티를 조작할 수 있는 메서드를 정의합니다.
@Query("SELECT MAX(c.id) FROM Coffee c")
// @Query 어노테이션은 사용자 정의 JPQL(Jakarta Persistence Query Language) 쿼리를 정의합니다.
fun findMaxId(): Int?
// "findMaxId" 메서드는 Coffee 엔터티의 최대 ID 값을 찾는 쿼리를 실행하고, 결과를 Int로 반환합니다. 결과가 없을 경우 nullable한 Int를 반환합니다.
}
4. MongoDB 사용하는 User 레포지토리 수정
// vim repositories/UserRepository.kt
package com.example.practicekopring.repositories
import com.example.practicekopring.entities.User
import org.springframework.data.mongodb.repository.MongoRepository
// UserRepository 인터페이스는 User 엔터티와 관련된 데이터베이스 작업을 위한 Repository입니다.
interface UserRepository : MongoRepository<User, String> {
fun findByUsername(username: String): User?
}
5. Coffee 정상 작동 확인
User도 모두 정상작동합니다.
6. [참조] 많이 사용하는 JpaRepository 기본 제공 함수 예시 40가지 보러가기
https://growingsaja.tistory.com/982