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 |