웹(Web)/백엔드(Backend)
Spring Data JPA @Query 활용법(JPQL, DTO)
SK_MOUSE
2022. 8. 31. 23:36
이 글에서는 SpringBoot 환경에서 JpaRepository를 인터페이스에서 활용하는 방식과 일반 JPA 방식을 비교하는 내용을 다룬다.
@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, 값, DTO 조회하는법
1. 단순 엔티티 호출은 아래와 같다.
public interface MemberRepository extends JpaRepository<Member, Long> {
@Query("select m.username from Member m")
List<String> findUsernameList();
}
2. DTO에 맞게 호출하는 법은 아래와 같다.
MemberDto.java
package study.datajpa.repository;
import lombok.Data;
@Data
public class MemberDto {
private Long id;
private String username;
private String teamName;
public MemberDto(Long id, String username, String teamName) {
this.id = id;
this.username = username;
this.teamName = teamName;
}
}
위 Dto를 아래 Repository 에서 호출.
public interface MemberRepository extends JpaRepository<Member, Long> {
@Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) "
+ "from Member m join m.team t")
List<MemberDto> findMemberDto();
}
패키지를 찾아서 생성자에 맞는 위치에 값들을 할당해준 @Query를 날려주면 된다.
반응형