Skip to content

Latest commit

ย 

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