Spring Boot를 다른 개발자들이 쓴 코드를 깃허브에서 보면서 공부하고 있었는데
CrudRepository라는 새로운 개념을 발견해서
JpaRepository와의 차이점을 한번 포스팅 하고자 한다
Spring Data JPA 프레임워크의 일부로, 데이터베이스와 상호 작용하는 Spring Boot 애플리케이션을 개발하는 데 사용되는 인터페이스이다.
package com.bsm.domitory.domain.auth.Repository;
import com.bsm.domitory.domain.auth.Entity.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<UserEntity, String> {
}
CrudRepository 또한 JpaRepository 처럼 Spring Data JPA 프레임워크의 일부로 데이터베이스와 상호작용하는 Spring Boot 애플리케이션 개발하는데 사용되는 인터페이스이다
package com.example.login.domain.auth.repository;
import com.example.login.domain.auth.entity.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends CrudRepository<User, String> {
}
JpaRepository와 CrudRepository의 차이점을 알아보자
CrudRepository
: 기본적인 CRUD(Create, Read, Update, Delete) 작업을 수행하는 메소드를 제공한다. 이러한 메소드에는 save, findById, findAll, delete 및 count 등이 포함된다
JpaRepository
: CrudRepository의 모든 기능을 포함하며, 추가로 JPA와 관련된 고급 기능을 제공합니다.
예시)
JpaRepository는 flush, saveAndFlush, deleteInBatch 및 findAll(Specification spec)와 같은 메소드를 지원한다
CrudRepository
: 메소드의 이름은 일반적으로 데이터베이스 조작을 나타내는 동사(예: save, delete, findBy)로 시작해야한다. 메소드 이름의 규칙을 따라야한다.
JpaRepository
: JpaRepository는 메소드 이름 규칙을 따르지 않고, 메소드 이름을 기반으로 동적 쿼리를 생성할 수 있는 기능을 제공한다. 이를 통해 더 복잡한 쿼리를 간단한 메소드 이름을 사용하여 생성할 수 있다.
CrudRepository
: CrudRepository는 페이징 및 정렬을 위한 메소드를 제공하지 않는다.
JpaRepository
: JpaRepository는 페이징 및 정렬을 지원하기 위한 메소드를 제공한다.
예시)
findAll(Pageable pageable) 및 findAll(Sort sort) 메소드를 사용하여 페이징 및 정렬된 결과를 검색할 수 있다.
CrudRepository
: CrudRepository는 사용자 정의 쿼리를 작성할 수 있도록 지원하지 않는다.
JpaRepository
: JpaRepository는 @Query 어노테이션을 사용하여 사용자 정의 쿼리를 정의하고 실행하는 기능을 제공한다.