전체 글 593

[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(..

[자바 ORM 표준 JPA 프로그래밍] 10-3. 객체지향 쿼리 언어: QueryDSL

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. QueryDSLJava에서 쿼리를 생성할 수 있게 해주는 오픈소스 프레임워크 특징항목설명타입 안전성자바 코드 기반- 컴파일 시점에 타입 체크유연성동적 쿼리 생성- 주어진 조건에 따라 동적으로 JPQL 쿼리를 생성하여 실행함Fluent APIMethod Chaining 방식- 직관적이고 가독성이 높은 쿼리 작성다양한 지원다양한 데이터베이스 및 기술 지원 (SQL, JPA, MongoDB, Lucene 등) 예시) 타입 안전성더보기@Test@Transactionalvoid type_safety() { QUser user = QUser.user; JPAQuery query = new JPAQuery(entityMa..

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

4. Repository Methods Returning Collections or IterablesStreamable스트림을 제공하는 인터페이스Iterable을 확장스트림을 비병렬로 처리할 수 있게 함. (filter(), map() 등의 스트림 메서드 사용 가능)예제더보기interface PersonRepository extends Repository { Streamable findByFirstnameContaining(String firstname); Streamable findByLastnameContaining(String lastname);}Streamable result = repository .findByFirstnameContaining("av") .and(repos..

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

1. Query Lookup Strategies@EnableJpaRepositories (queryLookupStrategy)queryLookupStrategy 옵션설명CREATE_IF_NOT_FOUND (기본값)선언된 쿼리(@Query 등)이 있으면 사용하고, 없으면 메서드 이름 기반으로 쿼리 생성CREATE무조건 메서드 이름 기반으로 쿼리 생성 (어노테이션 선언 무시)USE_DECLARED_QUERY선언된 쿼리(@Query 등)만 사용, 없으면 애플리케이션 시작 시 예외 발생 2. Query CreationQuery Builder 기반 생성메서드 이름을 추론하여 JPQL Query를 생성합니다. Parsing Query Method Name요소설명예시subject쿼리 목적 (메서드 도입부)find, ..