Backend/SpringBoot

@Mapper, @Mapping

Dean83 2024. 11. 20. 12:02

DTO와 Entity 간 상호 변환을 위해 사용되는 어노테이션이다.  

@Mapper 는 인터페이스에 붙이는 어노테이션이고, @Mapping 은 실제 상호 변환을 하는 함수명에 붙이는 어노테이션 이다. 

 

  • @Mapping (source = "변수명", target = "변수명")
    • 소스 변수명을 타겟 변수명으로 치환하는 설정을 한다. 
    • 변수명이 여러개 일 경우 @Mapping 어노테이션을 해당 개수에 맞춰 여러개 붙여준다. 

 

다음은 예제이다. 

/////Entity가 다음과 같다고 가정/////

...

@Entity
@Getter
@Setter
public class EntityData
{
	...
	private String val1;
    private String val2;
    private String val3;
    ....
    
}


///DTO가 다음과 같다고 가정////

...

public class TestDTO
{
	...
    private String name;
    private String addr;
    private String phone;
    ...
}


////Mapper 예/////

@Mapper
public interface MapperTest
{
	@Mapping (source = "val1", target = "name")
    @Mapping (source = "val2", target = "addr")
    @Mapping (source = "val3", target = "phone")    
    public TestDTO fromEntity(EntityData entity);
    
    @Mapping (source = "name", target = "val1")
    @Mapping (source = "addr", target = "val2")
    @Mapping (source = "phone", target = "val3")    
    public EntityData fromDTO(TestDTO dto);
}




////서비스에서 활용 예/////

...
@Service
public class TestService
{
	private MapperTest mapper;
    private TestRepository repo;
    
    //DI 인젝션
    TestService(MapperTest map, TestRepository r)
    {
    	mapper = map;
        repo = r;
    }
    
    public TestDTO GetDTO(long id)
    {
    	EntityData data = repo.findById(id);
        return mapper.fromEntity(data);
    }
    
    public void SaveData(TestDTO dto)
    {
    	repo.save(mapper.fromDTO(dto));
    }
}

'Backend > SpringBoot' 카테고리의 다른 글

자바스크립트에서 타임리프 사용하기 (+onclick 인자 전달)  (0) 2024.12.18
전반적인 프로젝트 구조  (0) 2024.11.26
실행시 DB에 데이터 넣기  (1) 2024.11.19
AOP (함수 실행 intercept)  (0) 2024.10.30
QueryDSL  (0) 2024.10.30