06. R2dbcEntityOperations #
구조 #
- R2dbcEntityTemplate가 R2dbcEntityOperations를 상속한다.
- R2dbcEntityOperations가 FluentR2dbcOperations를 상속한다.
- FluentR2dbcOperations는 여러 Operations를 상속한다.
- ReactiveSelectOperation : select query와 관련된 메서드 제공
- ReactiveInsertOperation : insert query와 관련된 메서드 제공
- ReactiveUpdateOperation : update query와 관련된 메서드 제공
- ReactiveDeleteOperation : delete query와 관련된 메서드 제공
ReactiveSelectOperation #
- ReactiveSelectOperation의 select부터 시작
- TerminatingSelect의 count, exists, first, one, all 등으로 종료
- 구조
- select -> from -> as -> matching -> 실행
- select -> from -> matching -> 실행
- select -> as -> matching -> 실행
- select -> matching -> 실행
- select -> -> 실행
ReactiveSelectOperation 사용 #
- from : query를 실행할 table 이름을 전달
- as : Entity를 전부 mapping 하지 않고 특정 필드만 mapping 하고 싶은 경우
- Entity의 일부 프로퍼티만 담고 있는 subclass(혹은 인터페이스)를 넘겨서 projection
- projection이 제공되지 않는다면 Entity에 모든 필드를 mapping
- matching : query의 where문에 해당
- matching을 생략하면 table 전체에 대한 요청을 보내는 것과 동일
- 실행 : 마지막으로 count, exists, first, one, all 등의 연산을 선택
- count: 조건에 맞는 row의 개수 반환
- exists: 조건에 맞는 row 존재 여부 반환
- first: 조건에 맞는 첫 번째 row 반환
- one: 조건에 맞는 하나의 row 반환. 하나가 넘으면 exception
- all: 조건에 맞는 모든 row 반환
ReactiveSelectOperation 실행 #
- ConnectionFactory를 이용하여 R2dbcEntityTemplate을 생성
- Query와 Criteria를 이용해서 query 생성
- PersonNameOnly class를 이용해서 name만 projection
ReactiveInsertOperation #
- ReactiveInsertOperation의 insert 부터 시작하여 TerminatingInsert의 using으로 종료
- 구조
- insert -> into -> using
- insert -> using
ReactiveInsertOperation 사용 #
- into : query를 실행할 table 이름을 전달
- using : insert query에 이용할 entity를 전달
- 주어진 entity를 OutboundRow로 변환
- 변환된 OutboundRow로 쿼리 실행
ReactiveInsertOperation 실행 #
- into를 통해서 insert할 table 명시
- entity를 생성하여 using에 전달
ReactiveUpdateOperation #
- ReactiveUpdateOperation의 update부터 시작하여 TerminatingUpdate의 apply로 종료
- 구조
- update -> inTable -> matching -> apply
- update -> inTable -> apply
- update -> matching -> apply
- update -> apply
ReactiveUpdateOperation 사용 #
- inTable : query를 실행할 table 이름을 전달
- matching : query의 where문에 해당
- Query를 전달하여 query의 where에 들어갈 내용을 설정
- matching을 생략하면 table 전체에 대한 요청을 보내는 것과 동일
- apply : update를 수행
- Entity가 아닌 Update 객체 전달
- Update는 내부에 SqlIdentifier를 Key로 변경하려는 값을 Value로 갖는 Map 포함
- from과 update static method로 Update 객체 생성
- 결과로 영향을 받은 row의 숫자 반환
ReactiveUpdateOperation 실행 #
- inTable을 통해서 update할 table 명시
- matching으로 update 영향을 받는 row 제한
- update를 생성하여 apply에 전달
ReactiveDeleteOperation #
- ReactiveDeleteOperation의 delete 부터 시작하여, TerminatingDelete의 all로 종료
- 구조
- delete -> from -> matching -> all
- delete -> from -> all
- delete -> matching -> all
- delete -> all
ReactiveDeleteOperation 사용 #
- all : delete를 수행
- 결과로 영향을 받은 row의 숫자 반환
ReactiveDeleteOperation 실행 #
- from을 통해서 delete할 table 명시
- maching으로 delete 영향을 받는 row 제한
- all을 실행하여 결과 출력
R2dbcEntityOperations #
- FluentR2dbcOperations에서 제공하는 조합 방식 대신 다양한 쿼리를 수행하는 단축 메소드 제공
-
Query 객체를 인자로 받는 경우
-
Entity를 직접 인자로 받는 경우
- insert, update의 경우 주어진 entity로 값을 추가하거나 변경
- delete는 id를 추출하여 해당 id를 갖는 row를 제거
- 강의 : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지_