웹(Web)/백엔드(Backend)

Spring Data JPA @Query 활용법(JPQL, DTO)

SK_MOUSE 2022. 8. 31. 23:36
반응형

이 글에서는 SpringBoot 환경에서 JpaRepository를 인터페이스에서 활용하는 방식과 일반 JPA 방식을 비교하는 내용을 다룬다.

Spring Data 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를 날려주면 된다.

 

 

반응형