JPA는 자바 애플리케이션에서 데이터베이스 작업을 더 쉽게 하기 위해 사용하는 자바 API입니다. 이를 사용하여 엔티티 클래스를 데이터베이스 테이블로 매핑하고, 리포지토리 인터페이스를 통해 데이터를 조작합니다.
JPA 리포지토리에서 사용하는 쿼리 메서드 중 findBy 관련 메서드들은 특히 중요한데, 이들은 엔티티의 필드를 기반으로 데이터를 조회하는 데 사용됩니다. 쿼리 메서드는 메서드 이름 자체가 쿼리의 역할을 정의합니다. findBy 다음에 오는 단어(들)은 검색 조건을 나타내며, 이를 통해 JPA가 자동으로 적절한 SQL 쿼리를 생성합니다.
findBy 쿼리 메서드의 종류
- 단순 필드 조회: findBy<필드명> 형태를 사용하여 특정 필드 값으로 엔티티를 조회합니다.
- 예: findByUsername(String username)
- SQL 변환: SELECT ... WHERE username = ?
- And 조건: findBy<필드명1>And<필드명2> 형태를 사용하여 두 필드가 모두 일치하는 엔티티를 조회합니다.
- 예: findByUsernameAndPassword(String username, String password)
- SQL 변환: SELECT ... WHERE username = ? AND password = ?
- Or 조건: findBy<필드명1>Or<필드명2> 형태로 두 필드 중 하나라도 일치하는 엔티티를 조회합니다.
- 예: findByUsernameOrEmail(String username, String email)
- SQL 변환: SELECT ... WHERE username = ? OR email = ?
- LessThan, GreaterThan: 숫자 필드에 대해 특정 값보다 작거나 큰 엔티티를 조회합니다.
- 예: findByAgeLessThan(int age)
- SQL 변환: SELECT ... WHERE age < ?
- Between: 특정 필드가 두 값 사이에 있는 엔티티를 조회합니다.
- 예: findByAgeBetween(int startAge, int endAge)
- SQL 변환: SELECT ... WHERE age BETWEEN ? AND ?
- Like: 필드가 특정 패턴과 일치하는 엔티티를 조회합니다. 일반적으로 문자열 검색에 사용됩니다.
- 예: findByUsernameLike(String usernamePattern)
- SQL 변환: SELECT ... WHERE username LIKE ?
- IsNull, IsNotNull: 특정 필드가 null이거나 null이 아닌 엔티티를 조회합니다.
- 예: findByUsernameIsNull()
- SQL 변환: SELECT ... WHERE username IS NULL
- OrderBy: 특정 필드를 기준으로 결과를 정렬합니다.
- 예: findByAgeOrderByUsernameAsc(int age)
- SQL 변환: SELECT ... WHERE age = ? ORDER BY username ASC
이외에도 JPA는 CountBy, ExistsBy 등 다양한 쿼리 메서드를 지원합니다. 이러한 메서드들은 복잡한 쿼리를 작성할 때 코드의 가독성을 높이고, 버그를 줄이는 데 도움이 됩니다. 또한, @Query 어노테이션을 사용하여 JPQL(Java Persistence Query Language)이나 SQL을 직접 작성할 수도 있습니다.
'백엔드 > Spring' 카테고리의 다른 글
스프링부트 @Transactional의 개념과 사용법 (0) | 2024.01.08 |
---|---|
스프링 부트의 AOP: 공통 관심사 해결을 위한 접근 방식 (1) | 2024.01.08 |
Spring은 어떤 문제를 해결하려고 했을까? (0) | 2023.12.29 |
[JPA] JPA에서 복합키 사용하는 방법 (0) | 2023.12.19 |