JPA의 쿼리 메서드 Tip
Spring Data JPA의 쿼리 메서드에 대한 명명 규칙은 미리 정의된 키워드 및 규칙 집합을 기반으로 하므로 메서드 이름을 기반으로 쿼리를 생성할 수 있다.
Spring Data JPA에서 쿼리 메서드의 일반적인 형식은
find[Entity] By[Property] [Opearator] 패턴을 따른다.
find[Entity]
-쿼리하려는 엔티티 클래스의 이름
By[Property]
-필터링하려는 엔티티속성의 이름
[Opearator]
-속성에서 필터링하는 방법을 지정하는 선택적 연산자이다.
-Equals: 주어진값과 정확히 일치하는 속성이 있는 항목을 필터링
-GreaterThan : 지정된 값보다 큰 값을 가진 속성이 있는 항목을 필터링
-LessThan :지정된 값보다 작은 값을 가진 속성이 있는 항목을 필터링
-Like : 주어진 패턴과 일치하는 속성이 있는 항목을 필터링(패턴은 와일드카드 문자로 '%'를 포함)
-StartingWith : 지정된 접두사로 시작하는 속성이 있는 엔티티를 필터링
-EndingWith : 지정된 접미사로 끝나는 속성이 있는 항목을 필터링
-Containing : 지정된 하위 문자열을 포함하는 속성이 있는 항목을 필터링
-OrderBy : 하나 이상의 속성을 기반으로 결과의 정렬순서를 지정한다.
Tip
findById 과 getReferenceByid 두 메소드가 id를 기반으로 저장소에서 객체를 검색하는데 사용되지만 성능최적화로 보면
getReferenceByid 가 좋다.
getReferenceByid 는 데이터를 실제로 로드하지 않고 저장소에서 객체에 대한 참조를 검색하는데 사용되는 방법이다.
이 메서드는 개체의 id에 엑세스 하고 간단한 작업을 수행하기만 하는 경우에 사용한다.
findById 는 객체의 id를 기반으로 저장소에서 객체의 실제 데이터를 검색하는데 사용하고 데이터를 메모리에 로드하고 객체를 반환한다.
getReferenceByid 는 모든 속성을 로드하지 않고 객체에 참조를 반환하고 findById 는 전체 객체와 모든 속성을 메모리에 로드한다.더 문제가 되는건 지연로드와 같은 일부경우에는 연결된 모든 속성을 한번에 로드하게된다.
getReferenceByid : 엔티티에 대한 간단한 작업(엔티티가 존재하는지 확인, 다른개체에서 엔티티에 대한 참조설정)
findById : 엔티티 수정, 삭제 엔티티 작업을 직접적으로 수행해야 하는 경우에 유용!!