Skip to content

Files

Latest commit

09138cf ยท Oct 11, 2022

History

History
114 lines (72 loc) ยท 2.66 KB

MapStruct.md

File metadata and controls

114 lines (72 loc) ยท 2.66 KB

MapStruct

๊ฐ์ฒด ๊ฐ„์˜ ๋งคํ•‘์„ ํŽธํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

ํŠน์ง• - ๋น ๋ฅด๋‹ค.

Gradle

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชฉ๋ก

dependencies {
    implementation 'org.mapstruct:mapstruct:1.4.2.Final'
    annotationProcessor "org.mapstruct:mapstruct-processor:1.4.2.Final"
    annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
	compileOnly 'org.projectlombok:lombok:1.18.22'
    annotationProcessor 'org.projectlombok:lombok:1.18.22'
}

Generic Mapper example

public interface GenericMapper<D, E> {

    D toDto(E e);
    E toEntity(D d);

    @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
    E updateFromDto(D dto, @MappingTarget E entity);
}

@BeanMapping : ๋งคํ•‘ ์ •์ฑ…์„ ์„ค์ •ํ•œ๋‹ค.

@MappingTarget : ๋ณ€ํ™˜ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ return ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ์—…๋ฐ์ดํŠธํ•  Target์„ ์„ค์ •ํ•œ๋‹ค.

@Mapper(componentModel = "spring")
public interface CustomMapper extends GenericMapper<MemberDto, Member> {
}

componentModel = "spring" : spring์— ๋งž๊ฒŒ bean์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค.

MapStruct ์‚ฌ์šฉ๋ฒ•

๊ฐ์ฒด๋งˆ๋‹ค ๊ฐ๊ฐ ๋‹ค๋ฅธ ์†์„ฑ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ง€์ •์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

@Mapper

Mapper๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

@Mapping

๊ฐ์ฒด ๊ฐ„์˜ ๋งคํ•‘์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

@Mapping ์˜ต์…˜

target : ๋งคํ•‘ํ•˜๋ ค๋Š” ๊ฐ์ฒด(๊ฒฐ๊ณผ)์˜ ํ•„๋“œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

source : ๋งคํ•‘์„ ์‹œ๋„ํ•˜๋Š” ๊ฐ์ฒด(์ž…๋ ฅ)์˜ ํ•„๋“œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

constant : target์„ ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•œ๋‹ค.

experssion : target ํ•„๋“œ์— ํ•จ์ˆ˜๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค

ex) "java(memberDto.getName() + " is me")"

๋“ฑ๋“ฑ ๋งŽ์€ ์˜ต์…˜๋“ค์ด ์žˆ๋‹ค. ์“ธ๋งŒํ•œ ์˜ต์…˜๋“ค์ด ๋งŽ์ด ๋ณด์ธ๋‹ค.

์ •์ฑ…

unmappedSourcePolicy

Source์˜ ํ•„๋“œ๊ฐ€ Target์˜ ํ•„๋“œ์— ๋งคํ•‘๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์ •์ฑ…์ด๋‹ค.

  1. IGNORE (default)
  2. WARN
  3. ERROR

ERROR๋กœ ์„ค์ •์‹œ Source ํ•„๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธด๋‹ค.

unmappedTargetPolicy

Target์˜ ํ•„๋“œ๊ฐ€ ๋งคํ•‘๋˜์ง€ ์•Š์„ ๋•Œ ์ •์ฑ…์ด๋‹ค.

  1. IGNORE
  2. WARN (default)
  3. ERROR

ERROR๋กœ ์„ค์ •์‹œ Target ํ•„๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธด๋‹ค.

typeConversionPolicy

ํƒ€์ž… ๋ณ€ํ™˜์‹œ ์œ ์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ์ •์ฑ…์ด๋‹ค.

  1. IGNORE (default)
  2. WARN
  3. ERROR

long์—์„œ int๋กœ ๊ฐ’์„ ๋„˜๊ธธ๋•Œ ์œ ์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

nullValueMappingStrategy

Source๊ฐ€ null์ผ ๋•Œ์˜ ์ •์ฑ…์ด๋‹ค.

  1. RETURN_NULL (default)
  2. RETURN_DEFAULT

nullValuePropertyMappingStrategy

Source์˜ ํ•„๋“œ๊ฐ€ null์ผ ๋•Œ ์ •์ฑ…์ด๋‹ค.

  1. SET_TO_NULL (default)
  2. SET_TO_DEFAULT
  3. IGNORE