분류 전체보기 558

[Spring Data JPA] 3-4. Specifications

1. Specification도메인 객체에 대한 조건을 정의public interface Specification { Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder);}  Predicate각 조건을 표현하는 객체 (where 절) CriteriaBuilder다양한 조건을 빌드할 수 있는 객체 Definitionpublic class CustomerSpecs { // 특정 날짜 이전에 생성된 고객을 찾는 Specification public static Specification isLongTermCustomer() { return (root, query, builder) -> { ..

[Spring Data JPA] 3-3. Custom Repository Implementations

1. CustomizingInterface: Custom Repository interface CustomizedUserRepository { void someCustomMethod(User user);} Implements: Custom Repository Interface (High Priority)postfix: Implclass CustomizedUserRepositoryImpl implements CustomizedUserRepository { @Override public void someCustomMethod(User user) { // 사용자 정의 구현 내용 }} Extends: CrudRepositoryinterface UserRepository extends CrudRepo..

[Spring Data JPA] 3-2. JPA Query Methods (4)

8. Modifying Queries@Modifying명시적 쿼리 선언 메서드 중, 수정 or 삭제 연산일 때 붙여주는 애노테이션 예제) update더보기@Modifying(flushAutomatically = true, clearAutomatically = true)@Query("update User u set u.firstname = ?1 where u.lastname = ?2")int setFixedFirstnameFor(String firstname, String lastname);flushAutomatically: 커밋 전 플러시clearAutomatically: 커밋 후 영속성 컨텍스트 초기화 예제) delete더보기 @Modifying @Query("delete from User u wh..

[Spring Data JPA] 3-2. JPA Query Methods (6)

11. Configuring Fetch- and LoadGraphsEntity Graph엔티티 조회 시, 연관 엔티티들을 fetch 하기 위한 구성 (어떤 연관 엔티티를 함께 로딩할 지 정의)특징Fetch GraphLoad Graph정의명시된 속성만 Fetch하고 나머지 속성은 Lazy로 처리명시된 속성만 Fetch하고 나머지 속성은 FetchType 설정에 따름사용법javax.persistence.fetchgraph를 사용javax.persistence.loadgraph를 사용사용 시점엔티티를 조회할 때 실행 시점에 따라 로딩될 속성 지정엔티티를 조회할 때 그래프에 따라 로딩될 속성 지정 예제) 엔티티 그래프 정의더보기Entity@Entity@NamedEntityGraph(name = "GroupIn..

[Spring Data JPA] 3-2. JPA Query Methods (5)

8. Scrolling대규모 결과 집합을 작은 청크 단위로 처리할 수 있음 모든 결과를 메모리에 로드 X (효율적으로 처리)기능설명Window스크롤링 중 반환되는 청크 - 정보: 현재 청크 데이터 + 위치 정보ScrollPosition스크롤링 작업에서 특정 위치를 나타내기 위한 객체- Offset-based특정 오프셋 위치부터 데이터를 가져옴- Keyset-based키셋 기반으로 데이터를 가져옴 - non-nullable 정렬 속성 사용Scrolling Type - Offset-basedDB에서 전체 결과를 물리화 ✅- 특정 오프셋 위치부터 데이터를 잘라서 반환- Keyset-basedDB에서 전체 결과를 물리화 ❌- 인덱스를 활용하여 데이터를 반환- 오프셋 기반의 단점을 보완 예제) ScrollPosi..

[Spring Data JPA] 3-2. JPA Query Methods (2)

4. Using @Queryrepository에 JPQL 쿼리 직접 선언도메인 클래스로부터 쿼리 로직 분리 예제더보기public interface UserRepository extends JpaRepository { @Query("SELECT u FROM User u WHERE u.lastname = :lastname") List findByLastname(@Param("lastname") String lastname);} @Paramquery method's named parameterparameter name 자동 탐지 제공 예제더보기public interface UserRepository extends JpaRepository { @Query("select u from User u ..

[Spring Data JPA] 3-2. JPA Query Methods (1)

1. Query Lookup StrategiesDerived Query메서드 이름 기반 자동 생성 예제) Derived Query더보기List findByFirstnameStartingWith(String prefix);List findByLastnameEndingWith(String suffix);List findByEmailContaining(String infix);List findByDescriptionNotContaining(String text);@EnableJpaRepositories(escapeCharacter = '\\')이스케이프 설정: like 쿼리 인수가 와일드카드 문자 포함 시 필요 Declared Query명시적 정의Annotation쿼리 타입정의 위치컴파일 시점쿼리 종류특징@N..

[Spring Data JPA] 3-1. Defining Query Methods (3)

7. Paging, Iterating Large Results, Sorting & Limiting대규모 데이터 세트를 효율적으로 조회 및 처리ConceptDescriptionUsagePaging페이징 정보 전달Pageable 매개변수 사용 (페이지 번호, 정렬 기준, 조회 결과 수)Page와 Slice 반환 타입 사용Sorting정렬 기준을 전달하는 매개변수Sort 매개변수 사용- 정렬 기준 설정 가능 (ascending(), descending())Limiting조회 결과 수를 제한하는 방법Top, First 키워드, Limit 매개변수 사용 예제) Paging더보기Page findByLastname(String lastname, Pageable pageable);Slice findByLastname(..