본문 바로가기

분류 전체보기147

스프링 데이터 JPA에서 페이징과 정렬을 해보자 먼저, 순수 JPA에서의 페이징은 어떻게 할까? 예제로 알아보자. 검색조건은 다음과 같다 검색조건: 나이가 10살 정렬조건: 이름으로 내림차순 페이징 조건: 첫 번째 페이지, 페이지당 데이터는 3건 스프링 데이터 JPA의 페이징과 정렬은 어떻게 할까? 1. 페이징과 정렬 파라미터 org.springframework.data.domain.Sort : 정렬 기능 org.springframework.data.domain.Pageable : 페이징 기능 2. 특별한 반환 타입 org.springframework.data.domain.Page : 추가 count 쿼리 결과를 포함하는 페이징 org.springframework.data.domain.Slice : 추가 count 쿼리 없이 다음 페이지만 확인 가능(.. 2022. 8. 25.
스프링 데이터 JPA의 반환타입을 알아보자 스프링 데이터 JPA는 유연한 반환 타입을 지원한다! 같은 네이밍인 findByUsername 를 통해 Member를 찾아보자 조회 결과가 많거나 없으면 어떻게 될까? 컬렉션 결과없음: 빈 컬렉션 반환 단건 조회 결과없음: null → Optional로 받자 결과 2건 이상: 예외발생 프로젝트에서 Optional를 사용했었는데 다른 경우도 있다는 것을 알게되었다! 2022. 8. 25.
[스프링 데이터 JPA] 파라미터 바인딩 종류와 컬렉션 파라미터 바인딩 파라미터 바인딩에는 두 가지 종류가 있다. 위치 기반 이름 기반 하지만, 위치기반의 경우 순서실수가 바뀔 위험이 있다. 코드 가독성과 유지보수를 위해 이름기반 파라미터 바인딩을 사용하자! 예시 @Query에 적용해보자 public interface MemberRepository extends JpaRepository { @Query("select m from Member m where m.username = :name") Member findMembers(@Param("name") String username); } 컬렉션 파라미터 바인딩을 알아보자 Collection타입으로 in절을 지원한다. @Query("select m from Member m where m.username in :names") L.. 2022. 8. 25.
@Query를 통해 DTO로 조회해보자 먼저 예시를 살펴보자 select이후 new 명령어를 사용한다. 생성자가 맞는 DTO가 필요하다. 위의 예시일 때 DTO는 다음과 같다. 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; } } 만약 Enum을 통해 비교한다면 어떻게 사용해야 할까? @Query(value = "select distinct new com.woowacourse.naepyeon.servi.. 2022. 8. 25.
스프링 데이터 JPA에서 쿼리 메소드 기능을 알아보자 쿼리 메소드의 3가지 기능 쿼리 메소드는 3가지 기능을 제공한다. 다음과 같다. 메소드 이름으로 쿼리 생성 (중요) 메소드 이름으로 JPA NamedQuery 호출 (실무에서 자주 사용되지 않음) @Query 어노테이션을 사용해서 레포지토리 인터페이스에 쿼리 직접 정의 (중요) 하나씩 살펴보자. 1. 메소드 이름으로 쿼리 생성 이름과 나이를 통해 회원을 조회한다면? 1-1. 순수 JPA 레포지토리 1-2. 스프링 데이터 JPA public interface MemberRepository extends JpaRepository { List findByUsernameAndAgeGreaterThan(String username, int age); } 애플리케이션 로딩시점에 오류를 발견할 수 있다! → 매우 큰.. 2022. 8. 25.
순수 JPA 기반 리포지토리와 차이점을 확인해보자 순수 JPA 기반 리포지토리를 먼저 알아보자 EntityManager를 통해 persist와 JPQL 등을 사용한다. 스프링 데이터 JPA를 사용하면 어떻게 될까? 인터페이스이며 구현체가 없다 구현 클래스(Member)를 보고 proxy 클래스를 만든다. 스프링 데이터 JPA가 구현클래스를 만들어준다. @Repository 애노테이션을 붙이지 않아도 된다. public interface MemberRepository extends JpaRepository { // 타입, PK } 만약 스프링데이터 JPA에서 제공되지 않는 함수를 작성한면? username으로 찾은 List를 찾고싶다면 어떻게 될까? 다음과 같은 예시는 실제로 JPA에서 제공이된다. 이를 쿼리메소드 기능 이라고 한다. public inte.. 2022. 8. 25.