[자바1.8기술]model-DTO 실습

gov's avatar
Nov 25, 2024
[자바1.8기술]model-DTO 실습
💡
프론트 이미지 보고 DTO 만들기
  • 프로젝트 생성> 구조 > 라이브러리 -lombok 최신 gson 2.9 추가
  • productDTO
    • notion image
      import lombok.Data; import ex01.model.Product; @Data // get, set public class ProductDTO { private int id; private String name; public ProductDTO(Product product) { this.id = product.getId(); this.name = product.getName(); } }
  • ProductDetailDTO
    • notion image
      import lombok.Data; import ex01.model.Product; import ex01.model.ProductOption; import java.util.ArrayList; import java.util.List; @Data public class ProductDetailDTO { private int productId; private String productName; // ProductDetailDTO의 범위 내에서만 사용되는 클래스 // 다른 클래스에서 직접 사용할 필요가 없다 private List<ProductOptionDTO> options = new ArrayList<>(); public ProductDetailDTO(List<ProductOption> options) { // 첫번째 옵션의 상품 ID와 이름 출력 // 모든 옵션의 Product 정보를 가져오려면 역시 반복문 필요 this.productId = options.get(0).getProduct().getId(); this.productName = options.get(0).getProduct().getName(); // models -> dtos for (ProductOption option : options) { this.options.add(new ProductOptionDTO(option)); } } // ProductOption 4개 전부 들고오기 @Data class ProductOptionDTO { private int id; private String name; private int price; private int qty; private Product product; // 초기화를 위한 생성자 public ProductOptionDTO(ProductOption option) { this.id = option.getId(); this.name = option.getName(); this.price = option.getPrice(); this.qty = option.getQty(); } } }
  • OrderDetailDTO
    • notion image
      notion image
      import lombok.Data; import ex01.model.OrderOption; import java.util.*; @Data public class OrderDetailDTO { private int orderId; private List<OrderProductDTO> products = new ArrayList<>(); private int sumPrice; public OrderDetailDTO(List<OrderOption> options) { // 1. orderId this.orderId = options.get(0).getOrder().getId(); // 2. sumPrice for (OrderOption option : options) { this.sumPrice += option.getTotalPrice(); } // 3. products // 3-1. 주문옵션들 productId [1,1,2] -> [1,2] 돈봉투 2개 만들기 Set<Integer> ids = new HashSet<>(); // [1,2] 넣기 for (OrderOption option : options) { ids.add(option.getProduct().getId()); } // 3-2. 중복 상품 크기만큼 반복하면서 주문 옵션 추가하기 for (Integer id : ids) { List<OrderOption> temp = new ArrayList<>(); for (OrderOption option : options) { if (id == option.getProduct().getId()) temp.add(option); } OrderProductDTO product = new OrderProductDTO(temp); products.add(product); } } @Data class OrderProductDTO { // 돈봉투 private int productId; private List<OrderOptionDTO> options = new ArrayList<OrderOptionDTO>(); public OrderProductDTO(List<OrderOption> options) { this.productId = options.get(0).getProduct().getId(); for (OrderOption option : options) { this.options.add(new OrderOptionDTO(option)); } } @Data class OrderOptionDTO { private int id; private String optionName; private int qty; private int totalPrice; public OrderOptionDTO(OrderOption option) { this.id = option.getId(); this.optionName = option.getOptionName(); this.qty = option.getQty(); this.totalPrice = option.getTotalPrice(); } } } }
Share article

goho