@Query 리포지토리 메소드 구현하기(정적쿼리)
Repository에 JPQL바로 구현하기
@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);
이 방법은 JPQL을 바로쓰고 이름도 간결하게 쓸 수 있다.
JPQL에 오타가 있으면 애플리케이션 코딩시점에 오류를 반환한다.
@Query에 JPQL을 바로 넣어서 해당 메소드 실행시 같이 실행시킬 수 있다.
Query값 DTO 조회하기 ( 실무에서 많이사용)
1.Stirng / Int로 받아오는 경우
@Query("select m.username from Member m")
List<String> findUsernameList();
//제네릭 타입을 사용해 반환받을 타입을 선택
2.DTO로 받기
-DTO 만들기
@Data
public class MemberDto{
private Long id;
private String username;
private String teamName;
}
@Query("select new package~MemberDto(m.id , m.username , t.name) from Member m Join m.team t")
//Select 에 Projection에 DTO 의 패키지명을 기재한다.
List<MemberDto> findMemberDto()
//제네릭으로 받을 DTO타입을 지정
파라미터 바인딩
이름기반 , 위치기반 , 이름기반을 주로 사용한다.
Select m from Member m where m.username = ?0 위치기반
Select m from Member m where m.username = :name 이름기반
@Qeury("select m from Member m where m.username = :name")
Member findMembers(@Param ("name") String username);
//이름 값을 @Param으로 받는다
컬렉션 파라미터 바인딩 (실무에서 많이사용 IN응용)
@Query("select m from Member m where m.username in :names")
//in 절로 파라미터를 받는다.
List<Member> findByNames(@Param("names") Collection<String> names);
호출시
List<Member> result = memberRepository.findByNames(Arrays.asList("AA" , "BB"))
//매개변수로 Collection <String> 타입의 데이터를 받아와 IN절에 넣고 실행한다.
'Spring Data JPA' 카테고리의 다른 글
| 3월 22일 SpringDataJPA 페이징과 정렬 (0) | 2023.03.22 |
|---|---|
| 3월 21일 SpringDataJPA 반환타입 (0) | 2023.03.21 |
| 3월 21일 Spring Data JPA 쿼리 메소드2 NamedQuery (0) | 2023.03.21 |
| 3월 21일 SpringDataJPA 쿼리메소드 (0) | 2023.03.21 |
| 3월 21일 Spring Data JPA (0) | 2023.03.21 |