Spring/Spring Data JPA

[Spring Data JPA] 3-2. JPA Query Methods (1)

noahkim_ 2024. 8. 2. 13:37

1. Query Lookup Strategies

  • Derived Query: 자동 생성 (메서드 이름 기반)
  • Declared Query: 명시적 정의

 

2. Query Creation

Derived Query

  • 메서드 이름 기반
List<User> findByFirstnameStartingWith(String prefix);
List<User> findByLastnameEndingWith(String suffix);
List<User> findByEmailContaining(String infix);
List<User> findByDescriptionNotContaining(String text);

 

이스케이프 설정
  • like 쿼리 인수가 와일드카드 문자 포함 시 필요
@EnableJpaRepositories(escapeCharacter = '\\')

 

Declared Query

@NamedQuery
  • 정적 쿼리 정의 (컴파일 타임에 컴파일됨)
  • class

 

@Query 
  • 정적 쿼리 정의  (JPQL, Native Query)
  • 동적 쿼리 정의 (JPQL)(런타임에 컴파일됨)
  • repository

 

3. Using JPA Named Queries

Declare

XML (META-INF/orm.xml)
<!-- META-INF/orm.xml -->
<named-query name="User.findByLastname">
  <query>select u from User u where u.lastname = ?1</query>
</named-query>

 

 

Annotation (@NamedQuery)
@Entity
@NamedQuery(name = "User.findByLastname", query = "SELECT u FROM User u WHERE u.lastname = ?1")
public class User {
    // ...
}

 

Use

Repository
public interface UserRepository extends JpaRepository<User, Long> {

  List<User> findByLastname(String lastname);

  User findByEmailAddress(String emailAddress);
}

 


출처