Spring

4. 스프링 공부 / 2021-07-14 (실전1 - 요구사항 분석과 기본 매)

공대키메라 2021. 7. 14. 23:20

 

그러면 실제로 어떻게 쓰이는지 한번 보도록 하자

 

요구사항 분석

  • 회원은 상품을 주문할 수 있다.
  • 주문 시 여러 종류의 상품을 선택할 수 있다.

기능 목록

 

- 회원 기능

  • 회원 등록
  • 회원 조회

- 상품 기능

  • 상품 등록
  • 상품 수정
  • 상품 조회

- 주문 기능

  • 상품 주문
  • 주문내역조회
  • 주문취소

 

 

 

위와 같은 것을 이제 개발자의 입장에서 class를 만드는 것이랑 DA입장에서 만드는 것은 좀 차이가 있다.

 

 Order테이블에서 이제 Member정보를 꺼내고 싶다면 Order.class안에 Member를 선언할 것이다. 

근데 JpaMain.class에서 그러면 어떻게 보이냐?

package jpabook.jpashop.domain;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
@Table(name = "ORDERS")
public class Order {

    @Id @GeneratedValue
    @Column(name = "ORDER_ID")
    private Long id;

    @Column(name = "MEMBER_ID") // 객체지향 스럽지 못해서 Member class를 변수로 가져옴
    private Long memberId;

    private LocalDateTime orderDate;

    @Enumerated(EnumType.STRING)
    private OrderStatus status;

    private Member member;

   // getter setter 생략...
}
package jpabook.jpashop;

import jpabook.jpashop.domain.Member;
import jpabook.jpashop.domain.Order;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

public class JpaMain {

    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();

        tx.begin();

        try{
            Order order = em.find(Order.class, 1L);
            Long memberId = order.getMemberId();

            Member member = em.find(Member.class, memberId);

            Member findMember = order.getMember();

            tx.commit();

        }catch(Exception e){
            tx.rollback();
        }finally{
            //code
            em.close();
        }

        emf.close();
    }

    private static void printMemberAndTeam(Member member) {

    }
}