프로젝트

[ JAVA Spring boot / 자바 스프링 부트 ] JPA 쿼리 메서드 명명 규칙

Seunghyun_KO 2024. 10. 9. 16:05
728x90
반응형

JPA(Java Persistence API)란?

자바를 사용하는 응용 프로그램에서 관계형 데이터베이스의 관리를 위한 인터페이스 및 기능을 제공하는 자바 API이다.

(JPA에 대한 자세한 내용은 추후 다른 게시글 URL 첨부 예정)

 

JPA의 특징

: SQL 문장을 작성하지 않고도 JPA Query method naming을 통해 JPQL쿼리를 수행하여 데이터베이스를 관리할 수 있다.

  > 이때, 메서드를 아무렇게나 작성하면 안 되고 정해진 규칙에 의해 작성해야 한다.

: CrudRepository에 사전 정의된 메서드 사용 시, 따로 Repository interface에 메서드를 선언하지 않아도 사용할 수 있다.

 

쿼리 메서드를 조합하는 방법은 다음과 같다

기본 동작 메서드 + 반환 데이터 + By + 검색 조건 + 정렬 방법

기본 동작 메서드

Methods Description
find 데이터 조회
count 데이터 수
save 데이터 저장 및 수정
delete 데이터 삭제
exists 데이터 존재 여부
get 데이터 조회(Lazy 방식)
search 데이터 조회
read 데이터 조회
remove 데이터 삭제
stream 데이터 조회(Stream 형태로 반)
query 데이터 조회

- 회색 처리된 메서드는 Query method로 잘 사용되지 않음


반환 데이터

Naming Description
(default) 조회된 단일 데이터(단일 엔티티)를 반환
All 조회된 여러 데이터(리스트 또는 컬렉션) 반환
Distinct 조회된 데이터 중 중복된 데이터 제외하고 반환
First 조회된 데이터 중 첫번째 데이터만 반환
Top(N) 조회된 데이터 중 상위 N개까지 반환

- (default)는 아무것도 작성하지 않은 경우를 의미

- Top(N)의 (N)은 괄호를 작성하지 않고 숫자를 입력하면 됨


검색 조건

Naming Description Sample JPQL snippet
And AB 조건 모두 만족하는 값 AAndB ... where A and B
Or A 또는 B 조건 중 하나 이상 만족하는 값 AOrB ... where A or B
Is, Equals A 속성이 ?1과 같은 값 AIs, AEquals ... where A = ?1
Between A 속성이 ?1이상 ?2이하인 값 ABetween ... where A between ?1 and ?2
LessThan A 속성이 ?1보다 작은 값 ALessThan ... where A < ?1
LessThanEqual A 속성이 ?1이하인 깂 ALessThanEqual ... where A <= ?1
GreaterThan A 속성이 ?1보다 큰 값 AGreaterThan ... where A > ?1
GreaterThanEqual A 속성이 ?1이상인 값 AGreaterThanEqual ... where A >= ?1
After A (시점)속성이 ?1 이후의 값 AAfter ... where A  > ?1
Before A (시점)속성이 ?1 이전의 값 ABefore ... where A < ?1
IsNull, Null A 속성이 Null인 값 A(Is)Null ... where A is null
IsNotNull, NotNull A 속성이 Null이 아닌 값 A(Is)NotNull ... where A is not null
Like A 속성이 ?1인 값 ALike ... where A like ?1
NotLike A 속성이 ?1가 아닌 값 ANotLike ... where A not like ?1
StartingWith A 속성이 ?1로 시작하는 값 AStartingWith ... where A like ?1%
EndingWith A 속성이 ?1로 끝나는 값 AEndingWith ... where A like %?1
Containing A 속성에 ?1가 포함되는 값 AContaining ... where A like %?1%
Not A 속성이 ?1가 아닌 값 ANot ... where A <> ?1
In A 속성중 ?1 컬렉션에 존재하는 값 AIn ... where A in ?1
NotIn A 속성 중 ?1 컬렉션에 없는 값 ANotIn ... where A not in ?1
True A 속성이 True인 값 ATrue ... where A = true
False A 속성이 False인 값 AFalse ... where A = false
IgnoreCase A 속성이 ?1인 값(대소구분X) AIgnoreCase ... where UPPER(A) = UPPER(?1)

- ?n은 n번째 파라미터를 의미

- After와 Before는 속성 데이터가 Date, Time과 같은 속성이어야 함

- (Is)의 경우 사용하려면 괄호를 생략하여 사용하거나, (Is) 전체를 생략하여 사용

- In과 NotIn의 파라미터는 Collection<Object>타입이 와야 함

- Not과 NotLike는 비슷한 역할을 수행하지만 용도가 다름(Not은 논리적 부정을 나타낼 때, NotLike는 문자열 패턴이 일치하지 않는 것을 찾을 때 사용, Is와 Like도 마찬가지)


결과 정렬 방법

Order By Description Sample JPQL snippet
오름차순 A 속성을 B기준 오름차순 정렬 AOrderByB ... where A order by B
내림차순 A 속성을 B기준 내림차순 정렬 AOrderByBDesc ... where A order by B desc

CrudRepository에 존재하여 따로 Repository interface에 선언하지 않아도 되는 메서드

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.data.repository;

import java.util.Optional;

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S entity);

    <S extends T> Iterable<S> saveAll(Iterable<S> entities);

    Optional<T> findById(ID id);

    boolean existsById(ID id);

    Iterable<T> findAll();

    Iterable<T> findAllById(Iterable<ID> ids);

    long count();

    void deleteById(ID id);

    void delete(T entity);

    void deleteAllById(Iterable<? extends ID> ids);

    void deleteAll(Iterable<? extends T> entities);

    void deleteAll();
}
728x90
반응형

'프로젝트' 카테고리의 다른 글

[ 웹 / WEB ] HTTP 응답 상태 코드  (2) 2024.09.08