728x90
- 스프링 데이터 JPA는 메소드 이름으로 JPA Named 쿼리를 호출하는 기능을 제공한다.
- JPA Named 쿼리의 이름 그대로 쿼리에 이름을 부여해서 사용하는 방법인데, 어노테이션이나 XML에 쿼리를 정의할 수 있다.
@Entity
@NamedQuery(
name="Member.findByUsername",
query="select m from Member m where m.username = :username")
public class Member {
...
}
<named-query name="Member.findByUsername">
<query><CDATA[
select m
from Member m
where m.username = :username
]></query>
</named-query>
이렇게 정의한 Named 쿼리를 JPA에서 직접 호출하려면 아래처럼 코드를 작성해야 한다.
public class MemberRepository {
public List<Member> findByUsername(String username){
...
List<Member> resultList =
em.createNamedQuery("Member.findByUsername", Member.class)
.setParameter("username", "회원1")
.getResultList();
}
}
스프링 데이터 JPA를 사용하면 아래와 같이 메소드 이름만으로 Named 쿼리를 호출할 수 있다.
public interface MemberRepository
extends JpaRepository<Member, Long> {//여기 선언한 Member 도메인 클래스
List<Member> findByUsername(@Param("username") String username);
}
- 스프링 데이터 JPA는 선언한 "도메인 + .(점) + 메소드 이름" 으로 Named 쿼리를 찾아서 실행한다.
- 따라서 예제는 Member.findByUsername이라는 Named 쿼리를 실행한다.
출처 : Java 표준 ORM JPA 프로그래밍 (저자 : 김영한)
728x90
'SpringDataJPA' 카테고리의 다른 글
페이징과 정렬 (0) | 2022.06.21 |
---|---|
@Query 와 파라미터 바인딩 (0) | 2022.06.21 |
스프링 데이터 JPA 설정 (0) | 2022.06.20 |
스프링 데이터 JPA 소개(부재 - 편리한 개발) (0) | 2022.06.19 |