반응형
Spring Data JPA 게시글은 대부분 인프런의 김영한님의 강의인 '실전! 스프링 데이터 JPA' 기반으로 내용을 정리했습니다.
리포지토리 메서드에 쿼리 정의하기
쿼리 메서드 기능 3가지
메서드 이름으로 쿼리 생성메서드 이름으로 JPA NamedQuery 호출- @Query 애노테이션을 사용해서 리포지토리 인터페이스에 쿼리 직접 정의
메서드에 JPQL 쿼리 작성
- MemberRepository.interface
@Query("select m from Member m where m.username = :username and m.age = :age")
List<Member> findUser(@Param("username") String username, @Param("age") int age);
- MemberRepositoryTest.class
@Test
public void testQuery() {
Member m1 = new Member("AAA", 10);
Member m2 = new Member("BBB", 20);
memberRepository.save(m1);
memberRepository.save(m2);
List<Member> result = memberRepository.findUser("AAA", 10);
assertThat(result.get(0)).isEqualTo(m1);
}
앞서 배웠던 메서드 이름으로 쿼리 생성하는 기능의 경우 조건이 많으면 많아질 수록 메서드명이 너무 길어진다는 단점이 있어 조건이 적을 때 주로 사용한다. 그리고 JPA NamedQuery는 실무에서 잘 사용하지 않는다. 마지막으로 이 Repository에 Query 정의하는 방법은 실무에서 정말 많이 사용하는 방법이다. 실무에서는 왜 이 방법을 많이 사용할까? 바로 @Query 애노테이션에 작성된 쿼리에 오타, 문법 오류 등이 발견되면 애플리케이션 로딩 시점에 에러를 띄워준다.
동적 쿼리를 작성하려면 QueryDSL을 사용해야한다. QueryDSL은 다른 강의에서 다룰 예정...!
반응형