티스토리 뷰
쿼리 메서드란?
Spring Data JPA에서 제공하는 쿼리 메서드 기능은 메서드 이름만으로 SQL/JPQL 쿼리를 자동 생성해주는 기능이다. 즉, 개발자가 쿼리를 작성하지 않아도 Repository 인터페이스에 메서드 작성만으로 DB 조회가 가능하다.
메서드 이름 규칙
쿼리 메서드는 아래와 같이 메서드 이름 규칙으로 만들어야 실제 JPQL로 변경하여 사용할 수 있으며, 키워드 + Entity 필드명 + CamelCase을 정확히 맞춰서 작성해야한다.
1. 조회 키워드
- findBy
- readBy
- getBy
- queryBy
findByUsername(String username)
// SELECT u FROM User u WHERE u.username = :username
2. 조건 키워드
- Equals (생략 가능)
- Is
- Not
- GreaterThan
- LessThan
- Between
- Like
- Containing
- StartingWith
- EndingWith
- IsNull
- IsNotNull
- True
- False
findByUsername(String username)
// SELECT u FROM User u WHERE u.username = :username
findByUsernameIs(String username)
// SELECT u FROM User u WHERE u.username = :username
findByUsernameNot(String username)
// SELECT u FROM User u WHERE u.username <> :username
findByAgeGreaterThan(int age)
// SELECT u FROM User u WHERE u.age > :age
findByCreatedDateBetween(LocalDate start, LocalDate end)
// SELECT u FROM User u WHERE u.age BETWEEN :start AND :end
findByUsernameContaining(String keyword)
// SELECT u FROM User u WHERE u.username LIKE %:keyword%
findByEmailEndingWith(String domain)
// SELECT u FROM User u WHERE u.username LIKE %:suffix
findByDeletedAtIsNull()
// SELECT u FROM User u WHERE u.deletedAt IS NULL
findByActiveTrue()
// SELECT u FROM User u WHERE u.active = true
3. AND/OR 조건
- And
- Or
findByUsernameAndEmail(String username, String email)
// SELECT u FROM User u WHERE u.username = :username AND u.email = :email
findByUsernameOrEmail(String username, String email)
// SELECT u FROM User u WHERE u.username = :username OR u.email = :email
4. 정렬
- OrderBy...Desc/Asc
findByAgeOrderByUsernameDesc(int age);
// SELECT u FROM User u WHERE u.age = :age ORDER BY u.username DESC
5. 개수/존재 여부
- countBy
- existBy
long countByUsername(String username);
// SELECT COUNT(u) FROM User u WHERE u.username = :username
boolean existsByEmail(String email);
// SELECT CASE WHEN COUNT(u) > 0 THEN true ELSE false END FROM User u WHERE u.email = :email
쿼리 메서드 주의할 점
쿼리 메서드는 너무 길어지면 가독성이 떨어지기 때문에 길어지면 @Query 사용을 권장한다. 그리고 Entity 필드명으로 JPQL이 생성 되기 때문에 Entity 필드명이 바뀔 경우 메서드도 추가로 수정해야 한다. 그렇지 않으면 애플리케이션 시작하는 시점에 오류가 발생하게 된다.
쿼리 메서드를 언제 사용 하는게 좋을까?
쿼리 메서드를 추천 하는 경우 1. 단순 조회 2. 조건 1~3개 정도 3. 빠른 개발 이며 비추천 하는 경우 1. 복잡한 통계 쿼리 2. 다중 JOIN 3. 성능 튜닝이 필요한 경우 이렇게 볼 수 있다.
쿼리 메서드 정리
Spring Data JPA의 쿼리 메서드는 메서드 이름을 규칙(CamelCase + 키워드)에 따라 해석해 자동으로 JPQL을 생성하는 기능이다. 주로 SELECT 조회에 사용되며, DELETE는 지원하지만 UPDATE는 지원하지 않아 @Query나 변경 감지를 사용해야 한다. 간단한 조건 조회에는 매우 편리하지만, 복잡한 쿼리는 가독성과 한계 때문에 별도의 방법을 사용하는 것이 좋다.
본 포스팅은 “실전! 스프링 데이터 JPA/인프런”를 학습한 내용을 정리한 것
