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 | A와 B 조건 모두 만족하는 값 | 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();
}
'프로젝트' 카테고리의 다른 글
[ 웹 / WEB ] HTTP 응답 상태 코드 (2) | 2024.09.08 |
---|