[실전! 스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화] API 개발 고급(1): 조회용 샘플 데이터 입력

2024. 8. 27. 16:26·Back-End/JPA

[작성일: 2023. 09. 29]

 

조회용 샘플 데이터 입력

 

API 개발 고급 설명을 위해 샘플 데이터를 입력하자.

 

  • user A는 JPA1 BOOK, JPA2 BOOK을 주문했다.
  • user B는 SPRING1 BOOK, SPRING2 BOOK을 주문했다.
  • 최종적으로는 주문 2건이 만들어진다.

 

@Component
@RequiredArgsConstructor
public class InitDb {

    private final InitService initService;

    @PostConstruct
    public void init() {
        initService.dbInit1();
    }

    @Component
    @Transactional
    @RequiredArgsConstructor
    static class InitService {

        private final EntityManager em;

        public void dbInit1() {
            Member member = new Member();
            member.setName("user A");
            member.setAddress(new Address("서울", "1", "1111"));
            em.persist(member);

            Book book1 = new Book();
            book1.setName("JPA1 BOOK");
            book1.setPrice(10000);
            book1.setStockQuantity(100);
            em.persist(book1);

            Book book2 = new Book();
            book2.setName("JPA2 BOOK");
            book2.setPrice(20000);
            book2.setStockQuantity(100);
            em.persist(book2);

            OrderItem orderItem1 = OrderItem.createOrderItem(book1, 10000, 1);
            OrderItem orderItem2 = OrderItem.createOrderItem(book2, 20000, 1);

            Delivery delivery = new Delivery();
            delivery.setAddress(member.getAddress());
            Order order = Order.createOrder(member, delivery, orderItem1, orderItem2);
            em.persist(order);
        }
    }
}

 

회원 목록
상품 내역

 

 

 

user A가 책 2권을 주문한 것을 확인할 수 있다.

이제 user B 코드를 만들어야 하는데, 복사해서 사용해면 코드도 길어지고 똑같은 코드가 중복되게 되므로 메서드로 만들어서 반영했다.

 

@Component
@RequiredArgsConstructor
public class InitDb {

    private final InitService initService;

    @PostConstruct
    public void init() {
        initService.dbInit1();
        initService.dbInit2();
    }

    @Component
    @Transactional
    @RequiredArgsConstructor
    static class InitService {

        private final EntityManager em;

        public void dbInit1() {
            Member member = createMember("user A", "서울", "1", "1111");
            em.persist(member);

            Book book1 = createBook("JPA1 BOOK", 10000, 100);
            em.persist(book1);

            Book book2 = createBook("JPA2 BOOK", 20000, 100);
            em.persist(book2);

            OrderItem orderItem1 = OrderItem.createOrderItem(book1, 10000, 1);
            OrderItem orderItem2 = OrderItem.createOrderItem(book2, 20000, 1);

            Order order = createDelivery(member, orderItem1, orderItem2);
            em.persist(order);
        }

        private static Order createDelivery(Member member, OrderItem orderItem1, OrderItem orderItem2) {
            Delivery delivery = new Delivery();
            delivery.setAddress(member.getAddress());
            Order order = Order.createOrder(member, delivery, orderItem1, orderItem2);
            return order;
        }

        private static Book createBook(String name, int price, int stockQuantity) {
            Book book = new Book();
            book.setName(name);
            book.setPrice(price);
            book.setStockQuantity(stockQuantity);
            return book;
        }

        private static Member createMember(String name, String city, String street, String zipcode) {
            Member member = new Member();
            member.setName(name);
            member.setAddress(new Address(city, street, zipcode));
            return member;
        }

        public void dbInit2() {
            Member member = createMember("user B", "대전", "2", "2222");
            em.persist(member);

            Book book1 = createBook("SPRING1 BOOK", 20000, 200);
            em.persist(book1);

            Book book2 = createBook("SPRING2 BOOK", 40000, 300);
            em.persist(book2);

            OrderItem orderItem1 = OrderItem.createOrderItem(book1, 20000, 3);
            OrderItem orderItem2 = OrderItem.createOrderItem(book2, 40000, 4);

            Order order = createDelivery(member, orderItem1, orderItem2);
            em.persist(order);
        }
    }
}

 

 

회원 목록
상품 목록
주문 내역

 

주문 내역 화면에는 회원당 주문 내역을 하나만 출력하게 구현해서 하나만 노출되는 상태이다.

DB에서는 4건이 있는 것을 볼 수 있다.

 

 

주문 내역

 

 

 

 

 

 

 

 

 

 


🐣 출처: 인프런 김영한님 강의

 

이 글은 인프런의 김영한님 JPA 강의를 보고 작성한 글입니다.

강의를 들으면서 정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

 

저작자표시 비영리 변경금지 (새창열림)
'Back-End/JPA' 카테고리의 다른 글
  • [실전! 스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화] API 개발 고급(3): 컬렉션 조회 최적화(1)
  • [실전! 스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화] API 개발 고급(2): 지연 로딩과 조회 성능 최적화
  • [실전! 스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화] API 개발 기본
  • [실전! 스프링 부트와 JPA 활용 1 - 웹 애플리케이션 개발] 웹 계층 개발
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    데이터베이스
    게시판만들기
    의존성주입
    jsp
    Security
    JPA
    Swift
    객체
    MVC
    스프링
    Spring Security
    HTTP
    sql
    최주호
    자바
    Database
    변수
    김영한
    자바스크립트
    다형성
    프로그래머스
    DB
    spring
    생성자
    백준
    html
    javascript
    성능최적화
    알고리즘
    Java
  • hELLO· Designed By정상우.v4.10.0
뚜비
[실전! 스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화] API 개발 고급(1): 조회용 샘플 데이터 입력
상단으로

티스토리툴바