Spring Data R2DBC | 부록
부록 A: 리포지토리 쿼리 키워드
지원되는 쿼리 메서드의 제목 키워드
다음 표는 술어를 표현하기 위해 Spring Data 리포지토리의 쿼리 파생 메커니즘에서 일반적으로 지원되는 주제 키워드를 보여준다. 여기에 나열된 일부 키워드는 특정 상점에서 지원되지 않을 수 있으므로 지원되는 키워드의 정확한 목록은 상점별 문서를 참조하여라.
표 5: 제목의 키워드 조회
키워드 | 설명 |
---|---|
find...By , read...By , get...By , query...By , search...By , stream...By |
일반적으로 리포지토리 유형, Collection 또는 Streamable 하위 유형 또는 Page , GeoResults 등의 결과 래퍼 또는 기타 상점별 결과 래퍼를 리턴하는 일반적인 쿼리 메소드이다. findBy ... , findMyDomainTypeBy … 또는 추가 키워드와 함께 사용할 수 있다. |
count...By |
숫자 결과를 반환하는 카운트 프로젝션. |
delete...By , remove...By |
결과 없거나(void ) 또는 삭제 횟수를 반환하는 쿼리 메서드를 삭제한다. |
...First<number>... , ...Top<number>... |
쿼리 결과를 결과의 처음부터 <number> 으로 제한한다. 이 키워드는 find (및 기타 키워드) by 사이의 제목의 어느 곳에서나 사용할 수 있다. |
...Distinct... |
고유한 쿼리를 사용하여 고유한 결과만 반환한다. 해당 기능이 지원되는지 여부는 상점별 문서를 참조하여라. 이 키워드는 find (및 기타 키워드) by 사이의 제목의 어느 곳에서나 사용할 수 있다. |
지원되는 쿼리 메소드의 술어 키워드 및 한정자
다음 표는 Spring Data Repository 쿼리 파생 메커니즘에서 일반적으로 지원되는 술어 키워드를 나열한다. 그러나 여기에 나열된 일부 키워드는 특정 저장소에서 지원되지 않을 수 있으므로 지원되는 키워드의 정확한 목록은 저장소별 문서를 참조하여라.
표 6: 술어 키워드 쿼리
논리 키워드 | 키워드 표현 |
---|---|
AND |
And |
OR |
Or |
AFTER |
After , IsAfter |
BEFORE |
Before , IsBefore |
CONTAINING |
Containing , IsContaining , Contains |
BETWEEN |
Between , IsBetween |
ENDING_WITH |
EndingWith , IsEndingWith , EndsWith |
EXISTS |
Exists |
FALSE |
False , IsFalse |
GREATER_THAN |
GreaterThan , IsGreaterThan |
GREATER_THAN_EQUALS |
GreaterThanEqual , IsGreaterThanEqual |
IN |
In , IsIn |
IS |
Is , Equals , (또는 키워드 없음) |
IS_EMPTY |
IsEmpty , Empty |
IS_NOT_EMPTY |
IsNotEmpty , NotEmpty |
IS_NOT_NULL |
NotNull , IsNotNull |
IS_NULL |
Null , IsNull |
LESS_THAN |
LessThan , IsLessThan |
LESS_THAN_EQUAL |
LessThanEqual , IsLessThanEqual |
LIKE |
Like , IsLike |
NEAR |
Near , IsNear |
NOT |
Not , IsNot |
NOT_IN |
NotIn , IsNotIn |
NOT_LIKE |
NotLike , IsNotLike |
REGEX |
Regex, MatchesRegex , Matches |
STARTING_WITH |
StartingWith , IsStartingWith , StartsWith |
TRUE |
True , IsTrue |
WITHIN |
Within , IsWithin |
필터 술어 외에도 다음 규정자 목록이 지원된다.
표 7: 술어 한정자 키워드 쿼리
키워드 | 설명 |
---|---|
IgnoreCase , IgnoringCase |
대소문자를 구분하지 않는 비교를 위해 술어 키워드와 함께 사용된다. |
AllIgnoreCase , AllIgnoringCase |
모든 적절한 속성의 대소문자를 구분하지 않습니다. 쿼리 메소드 술어 어딘가에서 사용된다. |
OrderBy... |
정적 정렬 순서를 지정한 다음 속성 경로와 방향을 지정한다(예: OrderByFirstnameAscLastnameDesc ). |
부록 B: 리포지토리 쿼리 반환 유형
지원되는 쿼리 반환 유형
다음 표는 Spring Data 리포지토리에서 일반적으로 지원되는 반환 유형을 보여준다. 그러나 여기에 나열된 일부 유형은 특정 상점에서 지원되지 않을 수 있으므로 지원되는 반환 유형의 정확한 목록은 상점 특정 문서를 참조하여라.
Info
지리 공간 유형(GeoResult
, GeoResults
, GeoPage
등)은 지리 공간 쿼리를 지원하는 데이터 스토어에서만 사용할 수 있다. 일부 저장소 모듈은 자체 결과 래퍼 유형을 정의할 수 있다.
표 8: 쿼리 반환 유형
반환 유형 | 설명 |
---|---|
void |
반환 값이 없음을 나타낸다. |
프리미티브(Primitives) | Java 프리미티브. |
래퍼의 종류(Wrapper types) | Java 래퍼 유형. |
T |
고유한 엔티티. 쿼리 메서드가 최대 하나의 결과를 반환할 것으로 예상한다. 결과를 찾을 수 없으면 null 반환된다. 여러 개의 결과는 IncorrectResultSizeDataAccessException 를 트리거한다. |
Iterator<T> |
Iterator |
Collection<T> |
Collection |
List<T> |
List |
Optional<T> |
Java 8 또는 Guava Optional 쿼리 메소드가 최대로 1개의 결과를 반환되는 것을 기대한다. 결과가 없으면 Optional.empty() 또는 Optional.absent() 가 반환된다. 여러 개의 결과는 IncorrectResultSizeDataAccessException 를 트리거한다. |
Option<T> |
Scala 또는 Vavr Option 유형 중 하나. 전술의 Java 8의 Optional 와 같은 의미의 행동. |
Stream<T> |
자바 8 Stream |
Streamable<T> |
Iterable 의 편리한 확장 기능으로, 결과의 스트리밍, 매핑, 필터링, 연결 등의 메소드를 직접 공개한다. |
Streamable 를 구현해, Streamable 생성자 또는 팩토리 메소드 인수를 취하는 타입 |
Streamable 를 인수로 취하는 생성자 또는 ... .of(...) /... .valueOf(...) 팩토리 메소드를 공개하는 형태. 자세한 내용은 커스텀 스트리밍 가능한 래퍼 유형 반환을 참조한다. |
Vavr Seq , List , Map , Set |
Vavr 컬렉션 유형. 자세한 내용은 Vavr 컬렉션 지원을 참조하여라. |
Future<T> |
Future 메소드에 @Async 의 어노테이션이 붙을 것을 기대하고, Spring 의 비동기 메소드 실행 기능을 유효하게 할 필요가 있다. |
CompletableFuture<T> |
Java 8 CompletableFuture 메소드에 @Async 의 어노테이션이 붙일 것으로 기대하고, Spring 의 비동기 메소드 실행 기능을 유효하게 할 필요가 있다. |
ListenableFuture |
org.springframework.util.concurrent.ListenableFuture 메소드에 @Async 의 어노테이션이 붙을 것으로 기대하고, Spring 의 비동기 메소드 실행 기능을 유효하게 할 필요가 있다. |
Slice<T> |
사용 가능한 데이터가 더 있는지 여부를 나타내는 크기의 데이터 청크이다. Pageable 메소드 매개변수가 필요하다. |
Page<T> |
총 결과 수와 같은 추가 정보를 포함한 Slice . Pageable 메소드 매개변수가 필요하다. |
GeoResult<T> |
참조 위치까지의 거리와 같은 추가 정보를 포함하는 결과 항목. |
GeoResults<T> |
참조 위치까지의 평균 거리와 같은 추가 정보가 포함된 GeoResult<T> 목록이다. |
GeoPage<T> |
기준 위치까지의 평균 거리, Page 및 GeoResult<T> . |
Mono<T> |
리액티브 리포지토리를 사용해 0개 또는 1개의 요소를 방출하는 프로젝트 Reactor Mono . 쿼리 메서드가 최대 하나의 결과를 반환할 것으로 예상한다. 결과를 찾을 수 없으면 Mono.empty() 이 반환된다. 여러 개의 결과는 IncorrectResultSizeDataAccessException 를 트리거한다. |
Flux<T> |
프로젝트 Reactor Flux 는 리액티브 리포지토리를 사용하여 0개, 1개 또는 많은 요소를 방출한다. Flux 를 반환하는 쿼리는 무한한 수의 요소도 방출할 수 있다. |
Single<T> |
리액티브 리포지토리를 사용해 단일 요소를 방출하는 RxJava Single . 쿼리 메서드가 최대 하나의 결과를 반환할 것으로 예상한다. 결과를 찾을 수 없으면 Mono.empty() 이 반환된다. 여러 개의 결과는IncorrectResultSizeDataAccessException 를 트리거한다. |
Maybe<T> |
리액티브 리포지터리를 사용하여 0개 또는 1개의 요소를 방출하는 RxJava Maybe . 쿼리 메서드가 최대 하나의 결과를 반환할 것으로 예상한다. 결과를 찾을 수 없으면 Mono.empty() 가 반환된다. 여러 개의 결과는 IncorrectResultSizeDataAccessException 를 트리거한다. |
Flowable<T> |
리액티브 리포지토리를 사용하여 0개, 1개, 또는 많은 요소를 방출하는 RxJava Flowable . Flowable 를 반환하는 쿼리는 무한한 수의 요소도 방출할 수 있다. |
부록 C: 마이그레이션 가이드
다음 섹션에서는 Spring Data R2DBC의 새 버전으로 마이그레이션하는 방법에 대해 설명한다.
1.1.x에서 1.2.x로 업그레이드
Spring Data R2DBC는 R2DBC가 Spring 애플리케이션과 얼마나 통합 될 수 있는지 평가하는 목적으로 개발되었다. 주요 측면 중 하나는 R2DBC 지원이 유용하다는 것이 증명되면 핵심 지원을 Spring Framework로 마이그레이션하는 것이었다. Spring Framework 5.3에는 새로운 모듈 Spring R2DBC(spring-r2dbc
)가 포함되어 있다.
spring-r2dbc
는 Spring Data R2DBC에 의해 최초로 제공된 코어 R2DBC 기능( DatabaseClient
의 슬림한 변형, 트랜잭션 매니저, 접속 팩토리의 초기화, 예외 변환)를 제공한다. 1.2.0 릴리스는 다음 섹션에서 설명하는 몇 가지 변경 사항을 적용하여 Spring R2DBC에서 제공하는 것과 일치한다.
Spring R2DBC DatabaseClient
는 순수한 SQL 지향 인터페이스를 캡슐화하는보다 가벼운 구현이다. SQL 문을 실행하는 방법이 DatabaseClient.execute(...)
에서 DatabaseClient.sql(...)
으로 변경되었음을 알 수 있다. CRUD 작업을 위한 흐르는 API는 R2dbcEntityTemplate
으로 마이그레이션되었다.
로거 접두사 org.springframework.data.r2dbc
를 통해 SQL문 로깅을 사용하는 경우 Spring R2DBC 구성 요소를 가리 키도록 org.springframework.r2dbc
업데이트해야 한다 (즉, .data
을 삭제한다).
사용 중지 권장 (Deprecations)
-
o.s.d.r2dbc.core.DatabaseClient
와 해당 지원 클래스ConnectionAccessor
,FetchSpec
,SqlProvider
그리고 몇 가지 다른 비추천.NamedParameterExpander
등의 이름 첨부 파라미터 지원 클래스는 Spring R2DBC의DatabaseClient
구현에 의해 캡슐화되고 있기 때문에, 이것은 원래 내부 API 이었기 때문에, 대체는 제공하고 있지 않는다.org.springframework.r2dbc.core
에서 사용 가능한o.s.r2dbc.core.DatabaseClient
및 해당 Spring R2DBC 대체를 사용한다. 엔티티 기반 메서드 (select
/insert
/update
/delete
) 메소드는 버전 1.1에서 도입된R2dbcEntityTemplate
을 통해 사용할 수 있다. -
o.s.d.r2dbc.connectionfactory
,o.s.d.r2dbc.connectionfactory.init
,o.s.d.r2dbc.connectionfactory.lookup
패키지 사용 중지 권장.o.s.r2dbc.connection
에 있는 Spring R2DBC 의 변형을 사용한다.
o.s.d.r2dbc.convert.ColumnMapRowMapper
사용 중지 권장. 대신에 o.s.r2dbc.core.ColumnMapRowMapper
사용한다.
-
바인딩 지원 클래스
o.s.d.r2dbc.dialect.Bindings
,BindMarker
,BindMarkers
,BindMarkersFactory
및 관련 유형의 사용 중지 권장.org.springframework.r2dbc.core.binding
대안을 사용한다. -
BadSqlGrammarException
,UncategorizedR2dbcException
사용 중지 권장,o.s.d.r2dbc.support
예외 변환. Spring R2DBC 는 현재o.s.r2dbc.connection.ConnectionFactoryUtils#convertR2dbcException
를 통해서 이용 가능한 SPI 없는 슬림한 예외 변환 변형을 제공한다.
Spring R2DBC에서 제공하는 대체 사용
마이그레이션을 용이하게 하기 위해 몇 가지 사용 중지된 유형이 Spring R2DBC에서 제공하는 대체 하위 유형이 되었다. Spring Data R2DBC 에서는, 몇개의 메소드가 변경되었는지, Spring R2DBC 타입을 받아들이는 새로운 메소드가 도입되었다. 구체적으로는 다음의 클래스가 변경된다.
R2dbcEntityTemplate
R2dbcDialect
org.springframework.data.r2dbc.query
유형
이러한 유형을 직접 조작하는 경우는 가져오기를 확인하고 업데이트하는 것이 좋다.
심각한 변화
OutboundRow
그리고 statement 매퍼가SettableValue
사용에서Parameter
으로 전환되었다.- 리포지토리 팩토리 지원에는
o.s.data.r2dbc.core.DatabaseClient
가 아닌o.s.r2dbc.core.DatabaseClient.
가 필요하다.
종속성 변경
Spring R2DBC를 사용하려면 다음 종속성을 반드시 포함한다.
org.springframework:spring-r2dbc
버전 1.4.0 최종 업데이트 2021-11-12 11:03:33 +0100