메소드 이름으로 쿼리 생성


순수 JPA 리포지토리

public List<Member> findByUsernameAndAgeGreaterThan(String username, int age) {
	return em.createQuery("select m from Member m where m.username = :username and m.age > :age")
						.setParameter("username", username)
						.setParameter("age", age)
						.getResultList();
}

스프링 데이터 JPA

public interface MemberRepository extends JpaRepository<Member, Long> {

	List<Member> findByUsernameAndAgeGreaterThan(String username, int age);

}

@Query, 리포지토리 메소드에 쿼리 정의하기


메서드에 JPQL 쿼리 작성

public interface MemberRepository extends JpaRepository<Member, Long> {

@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);

}

참고 : 실무에서는 메소드 이름으로 쿼리 생성 기능은 파라미터가 증가하면서 메서드 이름이 매우 지저분해진다. 따라서 @Query기능을 자주 사용하게 된다.

컬렉션 파라미터 바인딩

Collection타입으로 in절 지원

@Query("select m from Member m where m.username in :names")
List<Member> findByNames(@Param("names") List<String> names);

반환 타입

스프링 데이터 JPA는 유연한 반환 타입 지원