반응형
저번 포스팅에서 순수 JPA를 통해 페이징을 적용하는 방법에 대해 알아보았다. Spring Data JPA를 사용하면 정말 편리하게 PageRequest를 따로 만들필요없이 페이징 적용이 가능하다. 하지만 Spring Data JPA도 Page와 Pageable 인터페이스를 사용하기 때문에 해당 인터페이스에 대한 설명은 아래 포스팅을 참고하는 걸 추천한다. [JPA] 페이징과 정렬에 대해 알아보자. 페이징 (Pageable, Page, Slice ) 데이터베이스의 대용량 데이터를 처리할 때, 데이터를 효율적으로 로드하고 출력하기 위해 페이지 단위로 데이터를 분할하여 가져오는 기능을 페이징이라고 한다. 페 hstory0208.tistory.com 페이징 적용 파라미터로 Pageable 인터페이스를 받고 다..
Spring Data JPA는 JPA가 제공하는 엔티티 그래프 기능을 편리하게 사용하게 도와주는데, 이 기능이 바로 @EntityGraph이다. JPQL로 fetch join을 직접 작성하지 않고 @EntityGraph 어노테이션을 붙임으로서 fetch join을 편리하게 사용할 수 있다. 즉, @EntityGraph는 fetch join을 적용해주기 때문에 N + 1 문제를 해결하고, 성능 최적화에 도움을 줄 수 있다. (fetch join의 간편 버전) fetch join 이란? => 2023.06.12 - [JAVA/JPA] - [JPA] JPQL의 fetch join(패치 조인)이란? 사용 방법 Member와 Team 엔티티가 있고 이 둘은 "1 : 다" 양방향 관계를 갖는다고 가정해보자. 이 때..
페이징 (Pageable, Page, Slice ) 데이터베이스의 대용량 데이터를 처리할 때, 데이터를 효율적으로 로드하고 출력하기 위해 페이지 단위로 데이터를 분할하여 가져오는 기능을 페이징이라고 한다. 페이징 적용 코드 다음과 같은 순서와 방식으로 페이징을 적용할 수 있다. public interface MemberRepository extends JpaRepository { Page findByAge(int age, Pageable pageable); } /** * 1. PageRequest 객체 생성 * PageRequest.of() 메소드를 사용하여 페이지 번호와 페이지 크기를 전달하며 PageRequest 객체를 생성할 수 있다. * 이때 정렬 조건이 있는 경우 추가적으로 Sort 객체도 함께..
메소드 이름으로 쿼리 생성 Spring Data JPA는 메서드 이름을 통해 쿼리를 작성해주는 쿼리 기능을 제공한다. (공식 문서 : Spring Data JPA - Reference Documentation) List findByUsernameAndAgeGreaterThan(String username, int age); 위 메서드 이름을 통해 실행도니느 쿼리는 다음과 같다. select m from Member m where m.username = :username and m.age > :age" 이 기능은 보통 파라미터 개수가 적을 때 사용한다. ( 파라미터 수가 많아지면 메서드 이름이 너무 길어져 가독성이 떨어짐 ) 그리고 엔티티의 필드명이 변경되면 인터페이스에 정의한 메서드 이름도 꼭 함께 변경..
public interface MemberRepository extends JpaRepository { } Spring Data JPA를 사용하면 위 처럼 JpaRepository 인터페이스를 상속받은 인터페이스만 있어도 CRUD 기능을 다 지원한다. 그렇다면 어떻게 인터페이스의 구현체가 없는데도 MemberRepository가 작동하는 걸까? How ? JpaRepository 인터페이스를 상속 받은 MemberRepository 클래스 타입을 찍어보면 다음과 같이 나온다. memberRepository.getClass() => class com.sun.proxy.$ProxyXXX Spring Data JPA가 JpaRepository 인터페이스를 상속받은 인터페이스를 보고 구현체를 만들어서 의존성 주..