Controller 클래스와 Service 클래스의 연결을 위해 필요한것
컨트롤 클래스(헨들러 메서드)와 Gto클래스
서비스 클래스(로직 처리 메서드)와 Entity 클래스
Mapping 클래스(+ 인터페이스)
서비스 계층에서 로직 처리를 위해 데이터를 담는 클래스
서비스 클래스 로직 처리를 위해 컨트롤 클래스의 Dto처럼 Entity를 생성해 준다
Entity 클래스는 편리한 lombok으로 생성하였다
lombok 라이브러리
@Getter, @Setter
클래스의 모든 멤버 변수의 getter/setter 자동 생성
@NoArgsConstructor
클래스의 모든 멤버 변수를 파라미터로 갖는 생성자 자동 생성
@AllArgsConstructor
파라미터가 없는 기본 생성자를 자동으로 생성
getDto -> set엔티티 -> 서비스클래스(DB호출) -> getDto
getDto의 매핑을 헨들러가 getter, setter로 수행
매퍼 클래스를 통해 결합을 느슨하게 하자!
(Controll)DTO -> [Mapper] -> (service)Entity
(service)Entity -> [Mapper] -> (Controll)DTO ->
ResponseEntity(DTO): JSON -> Client
@RestController로 빈 등록을 하는 것 처럼 Service도 @Service로 등록@Autowired 꼭 사용해야 함!매퍼(Mapper) 구현 클래스를 자동으로 생성해 주는 코드 자동 생성기
build.gradledependencies {
...
...
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
}
@Mapper(componentModel = "spring")설정
build을 열면 bytecode가 디컴파일된 내용을 확인 할 수 있는데
실수로 디컴파일 플러그인 라이센스? 사용 거부를 눌러서
코드 내용이 온통 /* compiled code */로 도배되었다;;; 헐...
처음엔 원인을 모르고 해메다가 설정 플러그에서 활성화 시키니 해결되었다.