본문 바로가기

Spring

Spring JPA - 쿼리 결과 제한 서로 바꿔서 사용할 수 있는 fist 또는 top 키워드를 사용하여 쿼리 메서드의 결과를 제한할 수 있습니다. 선택적인 숫자 값을 top 또는 first에 추가하여 반환할 최대 결과 크기를 지정할 수 있습니다. 숫자를 생략하면 결과 크기가 1로 가정됩니다. // Top와 First를 사용하여 쿼리 결과 크기 제한 User findFirstByOrderByLastnameAsc(); User findTopByOrderByAgeDesc(); Page queryFirst10ByLastname(String lastname, Pageable pageable); Slice findTop3ByLastname(String lastname, Pageable pageable); List findFirst10ByLastnam.. 더보기
Spring JPA - 특수 매개변수 처리 쿼리의 매개변수를 처리하려면 메서드 매개변수를 정의해야한다. 그 외에도 인프라는 Pageable과 Sort같은 특정 유형을 인식하여 페이지 매김 및 정렬을 쿼리에 동적으로 적용한다. // 쿼리 메서드에서 Pageable, Slice, Sort 사용 Page findByLastname(String lastname, Pageable pageable); Slice findByLastname(String lastname, Pageable pageable); List findByLastname(String lastname, Sort sort); List findByLastname(String lastname, Pageable pageable); ❗️Sort 및 Pageable을 사용하는 API는 null이 아닌 .. 더보기
Spring JPA - 속성 표현식 속성 식은 관리되는 Entity의 직접 속성만 참조할 수 있다. 쿼리 생성 시, 구문 분석된 속성은 관리되는 도메인 클래스의 속성이다. 그러나 중첩된 속성을 조회하여 제약 조건을 정의할 수 있다. List findByAddressZipCode(ZipCode zipCode); Person에게 우편번호와 함께 주소가 있다고 가정한다. 이 경우 메서드는 x.address.zipCode 속성 순회를 만든다. 해결 알고리즘은 전체 부분(AddressZipCode)을 속성으로 해석하여 시작하고, 도메인 클래스에서 그 이름(대문자 없음)의 속성을 체크한다. 만약 알고리즘이 성공하면 그 속성을 사용한다. 그렇지 않으면 그 알고리즘은 카멜 케이스의 출처(원래 코드)를 오른쪽부터 머리와 꼬리를 분할하고 일치하는 속성을 찾.. 더보기
Spring JPA - 쿼리 생성 The query builder mechanism built into the Spring Data repository infrastructure is useful for building constraining queries over entities of the repository. The following example shows how to create a number of queries: // 메서드 이름에서 쿼리 생성 interface PersonRepository extends Repository { List findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname); // Enables the distinct flag fo.. 더보기
Spring JPA - 쿼리 조회 전략 1. XML configuration: query-lookup-strategy 속성을 통해 네임스페이스에서 전략을 구성 2. Java configuration: Enable${store}Repositories 주석의 queryLookupStrategy 속성을 사용 CREATE 쿼리 메서드 이름에서 저장소별 쿼리를 구성하려고 시도한다. 일반적인 접근 방식은 메소드 이름에서 잘 알려진 접두사 세트를 제거하고 나머지 메소드를 구문 분석하는 것이다. 쿼리 생성에 대한 자세한 내용은 "쿼리 생성"을 참조. USE_DECLARED_QUERY 선언된 쿼리를 찾으려고 시도하고 찾을 수 없으면 예외 throw 쿼리는 어딘가에 어노테이션으로 정의되거나 다른 방법으로 선언될 수 있다. 해당 저장소에 대해 사용 가능한 옵션을.. 더보기
Spring JPA - 쿼리 메서드 정의 리포지토리 접근은 메소드 이름으로부터 저장소별 쿼리를 얻는 2가지 방법이 있다. 1. 메서드 이름에서 직접 쿼리를 파생 2. 수동으로 정의된 쿼리 사용 실제 저장소에 따라 사용 가능한 옵션이 다름 그러나 실제 쿼리를 만들 지 결정하는 전략이 있어야 함 더보기
Spring JPA - 다양한 스프링 데이터 모듈과 함께 리포지토리 사용하기 다양한 스프링 데이터 모듈과 함께 리포지토리 사용하기 정의된 모든 리포지토리 인터페이스가 Spring Data 모듈에 바인딩됨 고유한 Spring Data 모듈을 사용하면 작업이 간단해짐 때때로 2개 이상 Spring 모듈을 사용하게 됨 리포지토리 지속성 기술을 구별해서 정의해야함 여러 리포지토리를 감지하면 Spring Data는 엄격한 저장소 구성 모드가 됨: 저장소 또는 도메인 클래스에 대한 세부 정보를 사용하여 리포지토리 정의에 대한 Spring Data 모듈 바인딩을 결정함 1. 모듈별로 특정한 리포지토리를 확장하여(상속받아)정의하면 특정 모듈은 유효함 -> 모듈별로 다른 리포지토리 사용가능 2. 도메인 클래스에 모듈별로 특정한 어노테이션을 달면 그 특정 모듈은 유효함 -> 써드파티 어노테이션(J.. 더보기
Spring JPA - 리포지토리 정의 1. 리포지토리 인터페이스 정의 1) 도메인 클래스별 리포지토리 인터페이스 정의 2) 인터페이스는 Repositoy를 확장(상속 받음) 3) 만약 CRUD 메서드를 노출하려면 CrudRepository를 확장(상속 받음) 2. 리포지토리 정의 미세 조정 1) 일반적으로 Repository 또는 CrudRepository 또는 PagingAndSortingRepository를 상속 받음 2) @RepositoryDefinition 어노테이션: Spring Data 인터페이스를 확장하지 않기 3) CrudRepository: Entity 조작을 위한 완전한 메서드 세트를 노출 @NoRepositoryBean // 이 어노테이션은 중간 리포지토리 인터페이스에 붙임, 붙이면 런타임에 인스턴스를 생성하지 않음 i.. 더보기