04. Object mapping #
Spring data의 object mapping #
- 만약 지원하는 converter이 없다면 MappingR2dbcConverter는 다음 과정을 거쳐서 Row를 Entity로 변환한다.
-
- Object cretion : Row의 column들로 Object 생성
-
- Property population : direct set, setter, with..메서드 등을 이용해서 Row의 Column을 Objec에 주입
-
Object creation #
Object creation 테스트 #
- R2dbcEntityTemplate의 select 호출시, R2dbcConverter를 사용하기 때문에 이를 이용해서 selet에 class를 넘기는 방식으로 테스트
PersistenceCreator constructor #
- @PersistenceCreator 을 갖는 constructor가 존재한다면 해당 constructor를 사용
- 여러개가 존재한다면 가장 마지막 @PersistenceCreator가 붙은 constructor를 사용
- NoArgsConstructor, AllArgsConstructor 전부 패스
NoArgs constructor #
- @PersistenceCreator 을 갖는 constructor가 없는 경우
- No-args constructor가 존재한다면 해당 constructor를 사용
- 다른 constructor 전부 패스
하나의 constructor #
- 오직 하나의 constructor이 존재한다면 해당 constructor 사용
2개 이상의 constructor가 있다면? #
- @PersistenceCreator를 갖는 constructor도 없고, No-args constructor도 없다면, Exception 발생
생성자에 전체 필드가 없었어도, 결과를 보면 필드에 값이 들어가있었다. -> Property popultaion 동작
Property population #
- r2dbc에서는 property가 mutable할때만 property population 적용
-
- id, name 필드를 채움
-
- property 순회하여 mutable한 경우에만 reflection을 사용해서 값 주입 (남은 필드들도 값이 생김)
Object mapping 최적화 #
- 객체를 가능한한 Immutable하게
- 모든 property를 인자로 갖는 All-args 제공
- property polulation이 발생하지 않게되어 성능 향상
- 코드 중복 방지를 위해 lombok 사용
Naming strategy #
- 별도의 @Table, @Column 어노테이션이 없다면, naming strategy에 맞춰서 클래스명, 변수명을 변경해서 table과 column에 mapping
- NamingStrategy interface를 구현하여 bean으로 등록하면 일괄 변경가능
- 강의 : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지_