본문 바로가기

Spring/JPA

JPA Repository 메서드

Repository란?

  • 스프링부트에서는 Entity의 기본적인 CRUD가 가능하도록 JpaRepository 인터페이스를 제공함
  • JpaRepository 인터페이스를 상속하면 된다. 이때 사용할 Entity와 ID 값이 들어가게 된다 (JpaRepository<T, ID>
// Member Entity의 Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
}

위와 같이 상속 받으면 위의 인터페이스는 다음과 같은 기능을 제공하게 된다.

메서드 기능

save() (저장) 엔티티를 저장함
findOne() (검색) pk로 레코드를 찾음
findAll() (검색) 전체 레코드 불러오기, 정렬 및 페이징이 가능함
count() (검색) 레코드 갯수
delete() (삭제) 레코드 삭제

기본 기능을 제외한 조회 기능을 추가하고 싶으면 규칙에 맞는 추가해야한다.

// Member Entity의 Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
	Member findByName(Sring name);
	int countByName(String name);
}

규칙에 맞는 쿼리 메서드를 추가해서 스프링에 알릴 수 있다.

메서드의 반환형이 Entity면 하나의 결과만 전달하고, 반환형이 List라면 쿼리에 해당하는 모든 객체를 전달한다.

메서드 예시 기능

findBy~ (검색) findByName(String name) 쿼리를 요청하는 메서드
countBy~ (검색) countByName(String name) 쿼리 결과 레코드 수를 요청하는 메서드
And (검색) findByEmailAndUserId(String email, String userId) 여러 필드를 and로 검색
Or (검색) findByEmailOrUserId(String email, String userId) 여러 필드를 or로 검색
Between (검색) findByCreatedAtBetween(Date fromDate, Date toDate) 필드의 두 값 사이에 있는 항목 검색
LessThan (검색) findByAgeGreaterThanEqual(int age) 작은 항목 검색
GreaterThanEqual (검색) findByAgeGraterThanEqual(int age) 크거나 같은 항목 검색
Like (검색) findByNameLike(String name) like 검색
isNull (검색) findByJobIsNull() null인 항목 검색
In (검색) findByJob(String …jobs) 여러 값중에 하나인 항목 검색
OrderBy (검색) findByEmailOrderByNameAsc(String email) 검색 결과를 정렬하여 전달

http://docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/#jpa.sample-app.finders.strategies

위의 자료를 참고하면 더 많은 메서드를 알 수 있다.

참고 링크


JPA 사용법 (JpaRepository)

[JPA] JPA Repository 메서드 명명규칙

'Spring > JPA' 카테고리의 다른 글

좋은 Entity 설계하는 방법들  (0) 2022.07.25
JPA 소개, 특징, 장점 및 단점  (0) 2022.07.19