안녕하세요 오늘은 JPA Repository Query에 대해서 작성해보려 합니다.
JpaRepository <T, ID> 사용 방법입니다.
Entity클래스 명 + Repository로 인터페이스 생성 후 JpaRepository를 상속 → JpaRepository를 상속받으면 구현체인 SimpleJpaRepository가 생성되어 상속받은 모든 메서드들을 사용할 수 있게 됩니다.
public interface MemberRepository extends JpaRepository <Member, Long> {
}
- 간단한 쿼리일 경우 사용하는 쿼리메서드에 대해 살펴보겠습니다.
-
- 조회 : find…By, read…By, query…By, get…By
- ex) findHelloBy처럼 …에 식별하기 위한 내용(설명)이 들어가도 되며, 메서드 이름으로 쿼리 생성
키워드 설명 find...By 조회 read…By 조회 get…By 조회 query…By 조회 search…By 조회 stream…By 조회 exists…By 조회, boolean 반환 count…By count조회, long 반환 delete…By 삭제, long 반환 remove…By 삭제, long 반환 …Distinct… 중복 제외하여 조회 - 조회 : find…By, read…By, query…By, get…By
다음으로는 흔히 사용할 수 있는 주요 메서드에 대해서 살펴보겠습니다.
메서드 | 설명 |
<S extendsT> save(S entity) | 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합 |
delete(T entity) | 엔티티 하나를 삭제한다. EntityManager.remove() 호출 |
Optional<T> findById(ID id) | 엔티티 하나를 조회한다. EntityManager.find() 호출 |
T getOne(Id id) | 엔티티 프록시로 조회한다. EntityManager.getReference() 호출 |
List<S> findAll(…) | 모든 엔티티를 조회. 정렬(Sort)이나 페이징(Pageable)조건을 파라미터로 제공 가능 |
다음으로는 Query Method에 포함할 수 있는 키워드에 대해 살펴보겠습니다.
메서드 이름 | 설명 | 예시 |
And | 여러필드를 and로 검색 | findByEmailAndUserId(String email, String userId) |
Or | 여러필드를 or로 검색 | findByEmailOrUserId(String email, String userId) |
Between | 필드의 두 값 사이에 있는 항목 검색 | findByCreatedAtBetween(Date fromDate, Date toDate) |
LessThen | 작은 항목 검색 | findByAgeGraterThanEqual(int age) |
GreaterThanEqual | 크거나 같은 항목 검색 | findByAgeGraterThanEqual(int age) |
Like | like 검색 | findByNameLike(String name) |
isNull | null인 항목 검색 | findByJobIsNull() |
In | 여러 값중에 하나인 항목 검색 | findByJob(String … jobs) |
OrderBy | 검색 결과를 정렬하여 전달 | findByEmailOrderByNameAsc(String email) |
마지막으로 포함하는 값 찾는 메서드입니다.
메소드 | 설명 |
Like, Containing, Contains, IsContaning | ~을 포함하는 값 |
StartingWith, IsStartingWith, StartsWith | ~으로 시작하는 값 |
EndingWith, IsEndingWith,EndsWith | ~으로 끝나는 값 |
IgnoreCase | 대소문자 무시 |
Not | ~을 포함하지 않은 |
이렇게 다양한 쿼리 메서드에 대해서 알아봤습니다.
저는 쿼리메서드를 자주 사용하다 보니 더 간편하고 좋다는 느낌을 받았습니다.
여러분들도 한번 사용하여, 편하다는 느낌과 간편하다, 좋다는 느낌을 받았으면 좋을 것 같습니다~!
오늘은 여기서 포스팅 마치겠습니다. 긴 글 읽어주셔서 감사합니다.
'JPA' 카테고리의 다른 글
[Spring] Spring Security(1) (1) | 2024.04.19 |
---|---|
[JPA] Fetch Type (0) | 2024.04.17 |
[JPA] Mapping (매핑) (0) | 2024.04.17 |
@EqualsAndHashCode (0) | 2024.04.01 |
JPA Annotation 정리 (2) | 2024.03.29 |