[작성일: 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 강의를 보고 작성한 글입니다.
강의를 들으면서 정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.