본문 바로가기
백엔드/Spring

[Jpa] FindBy

by 개발자K씨 2023. 12. 20.

JPA는 자바 애플리케이션에서 데이터베이스 작업을 더 쉽게 하기 위해 사용하는 자바 API입니다. 이를 사용하여 엔티티 클래스를 데이터베이스 테이블로 매핑하고, 리포지토리 인터페이스를 통해 데이터를 조작합니다.

JPA 리포지토리에서 사용하는 쿼리 메서드 중 findBy 관련 메서드들은 특히 중요한데, 이들은 엔티티의 필드를 기반으로 데이터를 조회하는 데 사용됩니다. 쿼리 메서드는 메서드 이름 자체가 쿼리의 역할을 정의합니다. findBy 다음에 오는 단어(들)은 검색 조건을 나타내며, 이를 통해 JPA가 자동으로 적절한 SQL 쿼리를 생성합니다.

findBy 쿼리 메서드의 종류

  1. 단순 필드 조회: findBy<필드명> 형태를 사용하여 특정 필드 값으로 엔티티를 조회합니다.
    • 예: findByUsername(String username)
    • SQL 변환: SELECT ... WHERE username = ?
  2. And 조건: findBy<필드명1>And<필드명2> 형태를 사용하여 두 필드가 모두 일치하는 엔티티를 조회합니다.
    • 예: findByUsernameAndPassword(String username, String password)
    • SQL 변환: SELECT ... WHERE username = ? AND password = ?
  3. Or 조건: findBy<필드명1>Or<필드명2> 형태로 두 필드 중 하나라도 일치하는 엔티티를 조회합니다.
    • 예: findByUsernameOrEmail(String username, String email)
    • SQL 변환: SELECT ... WHERE username = ? OR email = ?
  4. LessThan, GreaterThan: 숫자 필드에 대해 특정 값보다 작거나 큰 엔티티를 조회합니다.
    • 예: findByAgeLessThan(int age)
    • SQL 변환: SELECT ... WHERE age < ?
  5. Between: 특정 필드가 두 값 사이에 있는 엔티티를 조회합니다.
    • 예: findByAgeBetween(int startAge, int endAge)
    • SQL 변환: SELECT ... WHERE age BETWEEN ? AND ?
  6. Like: 필드가 특정 패턴과 일치하는 엔티티를 조회합니다. 일반적으로 문자열 검색에 사용됩니다.
    • 예: findByUsernameLike(String usernamePattern)
    • SQL 변환: SELECT ... WHERE username LIKE ?
  7. IsNull, IsNotNull: 특정 필드가 null이거나 null이 아닌 엔티티를 조회합니다.
    • 예: findByUsernameIsNull()
    • SQL 변환: SELECT ... WHERE username IS NULL
  8. OrderBy: 특정 필드를 기준으로 결과를 정렬합니다.
    • 예: findByAgeOrderByUsernameAsc(int age)
    • SQL 변환: SELECT ... WHERE age = ? ORDER BY username ASC

이외에도 JPA는 CountBy, ExistsBy 등 다양한 쿼리 메서드를 지원합니다. 이러한 메서드들은 복잡한 쿼리를 작성할 때 코드의 가독성을 높이고, 버그를 줄이는 데 도움이 됩니다. 또한, @Query 어노테이션을 사용하여 JPQL(Java Persistence Query Language)이나 SQL을 직접 작성할 수도 있습니다.