[Spring] Spring Jpa Repository 메소드 명명 규칙

rekv·2025년 2월 5일

Spring

목록 보기
6/15

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

예를 들어 select * from product where id =아이디; 와 같은 SQL문을 실행시키고 싶다면 findById (아이디)를 사용하면 된다.

  public Product getProductById(Long idx){
    Product result = productRepository.findById(idx);
    if(result.isPresent()){
      Product product = result.get();
      return product;
    }
    return null;
  }

반환 타입 : public Product findById(아이디)

Optional<Board> result = boardRepository.findById(id);

다음과 같은 형식으로도 작성할 수 있다.
Optional이란?

select * from product; : findAll()

  public List<Product> productList(){
    List<Product> productList = productRepository.findAll();
    return productList;
  }

반환값 : public List< Product > findAll()

select * from product where 변수 = 값; : fidndBy변수(값)

//ProductRepository.java
public interface ProductRepository extends JpaRepository<Product, Long> {
  Optional<Product> findAllByName(String name);
  public Product getProductByName(String name){
    Optional<Product> result = productRepository.findAllByName(name);
    if(result.isPresent()){
      Product product = result.get();
      return product;
    }
    return null;
  }

반환값 : public Optional< Product > findAllBy변수이름(변수타입 매개변수)

그 외에도 아래와 같은 규칙들이 있다.

기본 규칙

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

메서드 조건 규칙

조건메소드 명명규칙 예시실제 생성된 쿼리 예시
동일(=)findByNameselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name=?
대소(>, >=, <, <=)> : findByCodeIsGreaterThanselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code>?
>= : findByCodeIsGreaterThanEqualselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code>=?
< : findByCodeIsLessThanselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.code<?
<= : findByCodeIsLessThanEqualselect 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)findByNameContainsselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\'
findByNameNotContainsselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name not like ? escape '\'
findByNameLikeselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\'
findByNameNotLikeselect 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)findByNameStartsWithselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\'
findByNameEndsWithselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 where te1_0.name like ? escape '\'
NULLfindByNameIsNull 파라미터 필요 없음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
INfindByNameIn 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 (?)

정렬 규칙

종류메소드 예시쿼리 예시
오름차순findbyOrderByCodeselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 order by te1_0.code
내림차순findbyOrderByCodeDescselect te1_0.id,te1_0.code,te1_0.date,te1_0.name from test_entity te1_0 order by te1_0.code desc
컬럼 여러개findbyOrderByCodeDescNameDescselect 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

0개의 댓글