Coding 공부/IntelliJ

[SpringBoot] Entity와 DTO를 ModelMapper로 쉽게 변환하기

CBJH 2024. 6. 17.
728x90
반응형
영양 진단 결과를 DTO로 깔끔하게 변환! ✨ resultMapper 활용법 🧐

개발하다 보면 영양 진단 결과 데이터를 이리저리 가공해야 할 때가 있죠? 🤔 이때, resultMapper가 등장하면 삶의 질이 수직 상승합니다! 🚀

resultMapper는 왜 쓸까요? 🤓

  • 데이터 주고받기 편하게: 복잡한 NutritionDiagnosisResult 객체를 좀 더 가볍고 간편한 NutritionDiagnosisResultDTO 형태로 변환해 줍니다. 마치 택배 상자를 포장하는 것과 같죠! 🎁
  • 코드 재사용성 UP!: 매번 변환 로직을 작성할 필요 없이, resultMapper를 여러 곳에서 재사용하여 개발 시간을 단축할 수 있습니다.
  • 유지 보수 걱정 끝!: 변환 로직이 변경되더라도 resultMapper만 수정하면 되니, 유지 보수가 훨씬 쉬워집니다. 😊

코드 한 줄로 설명! 👇

 
return resultMapper.toDTO(result);
 

짠! 🤩 복잡한 NutritionDiagnosisResult 객체가 한 줄의 코드로 깔끔한 NutritionDiagnosisResultDTO로 변신! 이제 필요한 데이터만 쏙쏙 골라서 사용하세요! 🎈

핵심 포인트 🎯

  • resultMapper는 MapStruct 라이브러리의 도움을 받아 동작합니다.
  • NutritionDiagnosisResultMapper 인터페이스에 변환 규칙을 정의하면, MapStruct가 알아서 구현 코드를 생성해 줍니다. 신기하죠?
  • DTO는 데이터 전송 객체(Data Transfer Object)의 줄임말로, 데이터를 주고받는 데 특화된 객체입니다.

마무리하며... 🤗

resultMapper를 사용하면 복잡한 데이터 변환 과정을 간편하게 처리할 수 있습니다. 여러분도 꼭 활용해 보세요! 👍

이 글이 도움이 되셨다면 좋아요와 댓글 부탁드립니다! 🙏

 

 

//resultMapper 코드
import org.mapstruct.factory.Mapper;

@Mapper(componentModel = "spring")
public interface NutritionDiagnosisResultMapper {
    NutritionDiagnosisResultDTO toDTO(NutritionDiagnosisResult result);
}
//resultMapper 코드 사용하는 ServiceImpl 코드
import org.mapstruct.factory.Mappers;

@Service
public class NutritionDiagnosisServiceImpl implements NutritionDiagnosisService {

    @Autowired
    private NutritionDiagnosisResultRepository resultRepository;

    private final NutritionDiagnosisResultMapper resultMapper = Mappers.getMapper(NutritionDiagnosisResultMapper.class);

//...

    @Override
    public NutritionDiagnosisResultDTO saveDiagnosisResult(NutritionDiagnosis diagnosis, NutritionDiagnosisResultDTO resultDTO) {
        NutritionDiagnosisResult result = NutritionDiagnosisResult.builder()
                .basalMetabolicRate(resultDTO.getBasalMetabolicRate())
                .activityMetabolicRate(resultDTO.getActivityMetabolicRate())
                .totalMetabolicRate(resultDTO.getTotalMetabolicRate())
                .weightLossCarbohydrate(resultDTO.getWeightLossCarbohydrate())
                .weightLossProtein(resultDTO.getWeightLossProtein())
                .weightLossFat(resultDTO.getWeightLossFat())
                .weightMaintenanceCarbohydrate(resultDTO.getWeightMaintenanceCarbohydrate())
                .weightMaintenanceProtein(resultDTO.getWeightMaintenanceProtein())
                .weightMaintenanceFat(resultDTO.getWeightMaintenanceFat())
                .bulkingCarbohydrate(resultDTO.getBulkingCarbohydrate())
                .bulkingProtein(resultDTO.getBulkingProtein())
                .bulkingFat(resultDTO.getBulkingFat())
                .dailyRecommendedIntake(resultDTO.getDailyRecommendedIntake())
                .nutritionDiagnosis(diagnosis)
                .build();
		
        //레포지터리에 접근하려면 엔티티를 빌더로 만듬.
        resultRepository.save(result);
        
        //복잡한 NutritionDiagnosisResult 객체가 NutritionDiagnosisResultDTO로 변환된다. 한 줄이면 끝!
        //엔티티를 DTO로 변환함.
        return resultMapper.toDTO(result);
    }
}

댓글