Study/spring

[Java] Spring Jpa Repository 메소드 명명규칙 정리

 

Jpa Repository를 상속받은 인터페이스에서 findByXXX 형태로 메소드를 만들면 JPA에 의해 WHERE 절이 추가되었습니다.

그 외에도 다양한 조건을 사용할 수 있는데, 어떤 조건들을 사용할 수 있는지 정리해드리겠습니다.

 

기본 규칙

메소드 설명
findAll() 전체 데이터를 조회할 수 있습니다.
findBy() 조건을 추가하여 전체 데이터를 조회할 수 있습니다.
findTop5By() 조건에 맞는 데이터 중 상위 5건만 가져옵니다.
findDistinctBy() 중복을 제거하여 조회할 수 있습니다.
findFirstBy() 조회된 데이터 중 1건만 가져옵니다.
count() 전체 행 수를 조회합니다.
countBy() 조건에 맞는 전체 행 수를 조회합니다.
save() 단일 데이터를 저장합니다.
saveAll() 여러 건의 데이터를 저장합니다.
delete() 단일 데이터를 삭제합니다.
deleteAll() 여러 건의 데이터를 삭제합니다.
deleteBy() 조건에 맞는 데이터를 삭제합니다.

 

 

 

 

메서드 조건 규칙

조건 메소드 명명규칙 예시 실제 생성된 쿼리 예시
동일(=) findByName select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name=?
대소(>, >=, <, <=) > : findByCodeIsGreaterThan select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code>?
>= : findByCodeIsGreaterThanEqual select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code>=?
< : findByCodeIsLessThan select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code<?
<= : findByCodeIsLessThanEqual select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code<=?
범위(BETWEEN) findByCodeBetween
* 파라미터 2개 필요
select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code between ? and ?
포함(LIKE, NOT LIKE) findByNameContains select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\\'
findByNameNotContains select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name not like ? escape '\\'
findByNameLike select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\\'
findByNameNotLike select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name not like ? escape '\\'
시작, 끝 값(startWith, endWith) findByNameStartsWith select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\\'
findByNameEndsWith select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\\'
NULL findByNameIsNull
* 파라미터 필요 없음
select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name is null
findByNameIsNotNull
* 파라미터 필요 없음
select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name is not null
IN findByNameIn
* List 파라미터 필요
select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name in (?)
findByNameNotIn
* List 파라미터 필요
select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name not in (?)

 

정렬 규칙

종류 메소드 예시 쿼리 예시
오름차순 findbyOrderByCode select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 order by te1_0.code
내림차순 findbyOrderByCodeDesc select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 order by te1_0.code desc
컬럼 여러개 findbyOrderByCodeDescNameDesc select te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 order by te1_0.code desc,te1_0.name desc