728x90
반응형
순수 JPA 가 아닌 Data JPA에서 NamedQuery를 사용해 보겠습니다.
Data JPA 는 기본적으로 메서드 명으로 쿼리를 구현하여 실행시킨다.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html
NamedQuery는 Data JPA에서 메서드 명으로 쿼리를 생성하지 않고 직접 쿼리를 구현하여 실행시켜줍니다.
public interface MemberRepository extends JpaRepository<Member,Long> ,MemberRepositoryCustom{
// 메소드 명으로 JPA 를 사용하여 쿼리 실행
List<Member> findByUsernameAndAgeGreaterThan(String username,int age);
//쿼리를 직접 구현하여 실행한다.
@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);
//DTO 로 변환하여 조회 시 아래 쿼리처럼 구현한다.
@Query("select new study.datajpa.dto.MemberDto(m.Id, m.username, t.name) from Member m join m.team t")
List<MemberDto> findMemberDto();
//count 쿼리를 따로 실행 할 수 있다.
@Query(value="select m from Member m left join m.team t",
countQuery = "select count(m.username) from Member m")
Page<Member> findByAge(int age, Pageable pageable);
@Modifying(clearAutomatically = true) //<- update 할 시 꼭 넣어주어야 한다. clearAutomatically = true < 필수 X clear 가 필요할 시
@Query("update Member m set m.age = m.age+1 where m.age <= :age")
int bulkAgePlus(@Param("age") int age);
//컬렉션 타입을 파라미터로 넣어 줄 경우 IN 절을 사용하여 준다.
@Query("select m from Member m where m.username in :names")
List<Member> findByNames(@Param("names") List<String> names)
}
728x90
반응형