티스토리 뷰

728x90
반응형
의존성 주입 
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

순수 JPA 기반 리포지토리

 

 

@Repository
public class TestRepository{
	
    ....

}

순수 Spring을 이용할 경우 공통 인터페이스 설정
  • JavaConfig 설정 ( 만약 Spring boot 일 경우 생략 가능)

 

@Configuration
@EnableJpaRepositories
public class AppConfig{

	...
}

@EnableJpaRepositories 는 JPA Repository 공통인터페이스(JpaRepository)를 사용하기 위한 어노테이션이다.

@EnableJpaRepositories는 Config 클래스 하위 패키지를 스캔합니다.

또한 basePackages를 통해 스캔 범위를 지정할 수 있습니다.

 

 

@Configuration
@EnableJpaRepositories(basePackages = "com.test.repository")
  • 스프링 부트 사용시 @SpringBootApplication 위치를 지정(해당 패키지와 하위 패키지 인식)
  • 만약 위치가 달라지면 @EnableJpaRepositories 필요

스프링 데이터 JPA 기반 Repository 예시

 

 

public interface TestRepository extends JpaRepository<Test,Long>{
	...
}

기존 순수 JPA Respository에서는 Class로 생성을 하여 사용하였습니다. 하지만 JpaRepository를 사용할 경우 interface로 TestRepository를 선언하여 JpaRepository를 상속 받아 사용합니다.

 

  • JpaRepositroy<T,D> : T -> 엔티티 타입, D -> pk 식별자 타입
  • @Repository 선언 생략 가능

JpaRepository 분석
  • JpaRepository 인터페이스 : 공통 CRUD 제공

 

public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>{
 	...
}

JpaRepository 상속 분석

 

주요 메서드
  • save(S) : 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합
  • delete(T) : 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove() 호출
  • findById(ID) : 엔티티 하나를 조회한다. 내부에서 EntityManager.find() 호출
  • getOne(ID) : 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference() 호출
  • findAll(…) : 모든 엔티티를 조회한다. 정렬( Sort )이나 페이징( Pageable ) 조건을 파라미터로 제공할 수 있다
  • T findOne(ID)  -> Optional findById(ID) 변경
  • boolean exists(ID) -> boolean existsById(ID) 변경

 

728x90
반응형

'프로그램 언어 > Spring JPA' 카테고리의 다른 글

기본값 타입 (임베디드 타입)  (0) 2023.05.01
기본값 타입 (1)  (0) 2023.04.30
영속성 전이(CASCADE)  (0) 2023.04.28
지연 로딩, 즉시로딩  (0) 2023.04.28
PROXY(프록시)  (0) 2023.04.28
250x250
반응형
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함