Backend
home

DTO 설정과 서비스 계층 만들기

생성일
2025/01/24 05:52
태그
dto 생성
package org.zerock.apiserver.dto; import jakarta.persistence.Column; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDate; @Data @Builder @AllArgsConstructor @NoArgsConstructor public class TodoDTO { private Long tno; private String title; private String content; private boolean complete; private LocalDate dueDate; }
Java
복사
service
인터페이스 상에 entity → dto 로 dto → entity로 변환하는 코드 작성
package org.zerock.apiserver.service; import org.springframework.transaction.annotation.Transactional; import org.zerock.apiserver.domain.Todo; import org.zerock.apiserver.dto.TodoDTO; @Transactional public interface TodoService { TodoDTO get(Long tno); default TodoDTO entityToDTO(Todo todo) { return TodoDTO.builder() .tno(todo.getTno()) .title(todo.getTitle()) .content(todo.getContent()) .complete(todo.isComplete()) .dueDate(todo.getDueDate()) .build(); } default Todo dtoToEntity(TodoDTO todoDTO) { return Todo.builder() .tno(todoDTO.getTno()) .title(todoDTO.getTitle()) .content(todoDTO.getContent()) .complete(todoDTO.isComplete()) .dueDate(todoDTO.getDueDate()) .build(); } }
Java
복사
serviceimpl
package org.zerock.apiserver.service; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.zerock.apiserver.domain.Todo; import org.zerock.apiserver.dto.TodoDTO; import org.zerock.apiserver.repository.TodoRepository; import java.util.Optional; @Service @Log4j2 @RequiredArgsConstructor public class TodoServiceImpl implements TodoService { private final TodoRepository todoRepository; @Override public TodoDTO get(Long tno) { Optional<Todo> result = todoRepository.findById(tno); Todo todo = result.orElseThrow(); return entityToDTO(todo); } }
Java
복사
테스트 코드 작성
package org.zerock.apiserver.service; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest @Log4j2 public class TodoServiceTests { @Autowired TodoService todoService; @Test public void testGet() { Long tno = 50L; log.info(todoService.get(tno)); } }
Java
복사
// 테스트 결과 Hibernate: select t1_0.tno,t1_0.complete,t1_0.content,t1_0.due_date,t1_0.title from tbl_todo t1_0 where t1_0.tno=? 2024-08-29T20:29:44.737+09:00 INFO 12809 --- [ main] o.z.apiserver.service.TodoServiceTests : TodoDTO(tno=50, title=Title..48, content=Content......48, complete=false, dueDate=2024-08-28)
Java
복사