•
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
복사