Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- JPA 활용2
- 김영한
- 프로젝트 환경설정
- 벌크 연산
- 스프링 데이터 JPA
- 실무활용
- JPQL
- JPA
- 기본문법
- 스프링MVC
- 스프링
- jpa 활용
- 타임리프 문법
- Bean Validation
- 값 타입 컬렉션
- 불변 객체
- QueryDSL
- API 개발 고급
- 컬렉션 조회 최적화
- 트위터
- 타임리프
- 스프링 mvc
- 검증 애노테이션
- 임베디드 타입
- 페이징
- 예제 도메인 모델
- 로그인
- 일론머스크
- Spring Data JPA
- JPA 활용 2
Archives
- Today
- Total
RE-Heat 개발자 일지
[JPA 활용2] [2] API 개발 고급 - 준비 본문
인프런 김영한 님의 강의를 듣고 작성한 글입니다.
[1] 조회용 샘플 데이터 입력
프로그램 실행할 때마다 데이터를 입력하는 게 번거로우므로 따로 샘플 데이터값이 들어갈 수 있도록 세팅
<샘플 데이터>
주문 2건
userA (구입한 책은 JPA 책 2권)
- JPA1 BOOK
- JPA2 BOOK
userB (구입한 책은 스프링 책 2권)
- SPRING1 BOOK
- SPRING2 BOOK
InitDb
/**
* 총 주문 2개
* userA
* JPA1 BOOK
* JPA2 BOOK
* userB
* SPRING1 BOOK
* SPRING2 BOOK
*/
@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("userA", "서울", "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, 2);
Delivery delivery = createDelivery(member);
Order order = Order.createOrder(member, delivery, orderItem1, orderItem2);
em.persist(order);
}
private static Delivery createDelivery(Member member) {
Delivery delivery = new Delivery();
delivery.setAddress(member.getAddress());
return delivery;
}
public void dbInit2(){
Member member = createMember("userB", "진주", "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);
Delivery delivery = createDelivery(member);
Order order = Order.createOrder(member, delivery, orderItem1, orderItem2);
em.persist(order);
}
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;
}
private static Book createBook(String book, int price, int stockQuantity) {
Book book1 = new Book();
book1.setName(book);
book1.setPrice(price);
book1.setStockQuantity(stockQuantity);
return book1;
}
}
}
- @PostConstructor : 스프링 빈이 생성되는 시점에 실행되도록 하는 어노테이션이다.
- dbInit()을 @PostConstructor에 직접 넣어도 될 것 같지만, 스프링 라이프사이클이 있어 @Transactional이 제대로 동작하지 않을 수 있으므로 따로 분리한다.
- createMember, createBook으로 다시 쓰기 편하게끔 메소드화
- IntelliJ 윈도우 단축키 ctrl + alt + m으로 원하는 부분을 메소드화 할 수 있다.
- UserA, UserB에 파라미터 형식으로 넣는 방식으로 하면 IntelliJ가 알아서 처리해 준다. 단, 파라미터 변수명은 수정 필요할 수 있다.
- stockQuantity 같은 경우 모두 100으로 했더니 100 값이 들어갔는데, ctrl+alt+p를 눌러주면 알아서 파라미터화 해준다.
■ 실행결과
① 회원목록
② 상품목록
③ 주문내역
- userA와 userB는 각각 두 개의 상품을 시켰으나 샘플을 간략하게 만들기 위해 대표상품 1개만 화면에 노출되도록 만듦.
- 다시 말해 회원당 주문 내역을 하나만 출력했다는 의미다.
'백엔드 > JPA' 카테고리의 다른 글
[JPA 활용2] [4] API 개발 고급 - 컬렉션 조회 최적화(상편) (0) | 2023.09.01 |
---|---|
[JPA 활용2] [3] API 개발 고급 - 지연 로딩과 조회 성능 최적화 (0) | 2023.08.31 |
[JPA 활용2] [1] API 개발 기본 (0) | 2023.08.30 |
[JPA 활용1] [5] 웹 계층 개발(하편) (0) | 2023.08.27 |
[JPA 활용1] [5] 웹 계층 개발(상편) (0) | 2023.08.26 |