반응형
250x250
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 |
Tags
- 싸피10기
- 싸피 10기
- 자바 알고리즘
- ssafy
- 코드트리
- 싸피 기자단
- 코딩테스트
- 싸피 12기
- swea
- 싸피셜
- 자바스크립트 자료구조
- SSAFYcial
- 리액트
- 싸피11기
- 백준
- 프론트엔드
- 알고리즘
- 프로그래머스
- 싸피 대전캠퍼스
- 비동기
- 싸피
- 자료구조
- 개발자
- jpa
- 싸피 11기
- 자바스크립트
- 자바 코딩테스트
- 코딩테스트 자바
- 인프런
- 알고리즘 자바
Archives
- Today
- Total
병아리의 코딩 일기
[JPA] 이젠 실전이다! 요구사항 분석과 기본 매핑 본문
이번 시간엔 지금까지 배운 매핑을 바탕으로 조금 더 복잡한 예제를 만들어보자. 간단한 쇼핑몰 예제다.
요구사항 분석
- 회원은 상품을 주문할 수 있다.
- 주문 시 여러 종류의 상품을 선택할 수 있다.
기능 목록
- 회원 기능
- 회원 등록
- 회원 조회
- 상품 기능
- 상품 등록
- 상품 수정
- 상품 조회
- 주문 기능
- 상품 주문
- 주문내역 조회
- 주문 취소
Member Entity
@Entity
public class Member {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String city;
private String street;
private String zipcode;
//getter, setter 예제니까 다 만들자. setter는 고민할 필요 있음.
Id 는 내가 지정하는 것이 아니라 DB에서 자동생성되게 하기 위해서 @GeneratedValue 의 Strategy를 사용하였다.
AUTO가 기본이며, @GeneratedValue 뒤에 아무것도 입력하지 않으면 저절로 AUTO로 설정된다.
Order Class
@Entity
@Table(name = "ORDERS") //db에서는 order by 와 같이 order가 예약어로 걸려있기 때문에 안되는 DB도 있음. 그래서 orders로 많이 쓴다.
public class Order {
@Id @GeneratedValue
private Long id;
private Long memberId; // 누가 주문했는지 알아야 하니까!
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
}
여기서 중요한 것은 Enum 타입에는 @Enumerated(EnumType.STRING) 어노테이션을 달아주는 것!
EnumType.ORDINAL 를 사용하지 않도록 주의하자. 나중에 큰 문제로 이어질 수 있다.
무조건 EnumType.STRING 으로 사용하기!
데이터 중심 설계의 문제점
Order order = em.find(Order.class, 1L);
Long memberId = order.getMemberId();
- 현재 방식은 객체 설계를 테이블 설계에 맞춘 방식
- 테이블의 외래키를 객체에 그대로 가져옴
- 객체 그래프 탐색이 불가능
- 참조가 없으므로 UML도 잘못됨 (Id만 가지고 있기에 참조가 다 끊김)
다음 시간엔 연관관계 매핑에 대해서 배워보자.
Order에서 Member를 어떻게 할거냐?
Id 만 가지는 게 아니라 진짜 Membrer 를 가지게 됨!
진짜 객체 지향 설계다!
728x90
반응형
LIST