DB로 부터 조회한 결과에서 객체의 특정 값만 가져오고 싶은 경우 객체에서 feild값을 조회 하듯이 객체.field 형식으로 명시해주면 해당 값을 가져올 수 있다. 반환 형식으로는 해당 field의 데이터 형식에 맞춰주면 된다.
@Query("select m.username from Member m") List<String> findUsernameList();
publicinterfaceMemberRepositoryextendsJpaRepository<Member, Long> { 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);
@Query("select m.username from Member m") List<String> findUsernameList(); }
List<String> memberNames = memberRepository.findUsernameList(); for (String name : memberNames) { System.out.println("Username : " + name); } }
DTO를 사용해 @Query 작성하기
일반적으로 DB에서 데이터를 조회할 때 Entity 모든 값보다는 필요한 값 몇가지만을 가져오는 경우가 많다. 이렇게 필요한 데이터 만을 가져올 수 있도록 DTO class를 정의하고 DTO를 이용해 Entity에서 필요한 데이터만을 조회하는 방법이 더 효율적으로 데이터를 가져오는 방식이다. DTO를 이용해 해당 Entity에서 필요한 데이터만을 조회할 수 있도록 구현해보자!
@Query에서 DTO를 사용하기 위해서는 Select절에 패키지를 포함한 Class 경로를 명시해줘야 한다.
// DTO 로 결과 값 반환 받기 @Query("select new com.example.datajpa.dto.MemberDto( m.id, m.username, t.name)from Member m join m.team t") List<MemberDto> findMemberByDto();