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 리포지토리에서 일반적으로 지원되는 반환 유형을 보여준다. 그러나 여기에 나열된 일부 유형은 특정 상점에서 지원되지 않을 수 있으므로 지원되는 반환 유형의 정확한 목록은 상점 특정 문서를 참조하여라.

표 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> 기준 위치까지의 평균 거리, PageGeoResult<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




최종 수정 : 2021-12-28