DataBase/JPA
[JPA] 기본매핑
p8labs
2021. 8. 1. 17:30
728x90
반응형
매핑예제
실제로 도메인을 분석 하고 설계 해본다.
참고로 getter, setter 는 생략했다.
도메인 모델 분석
- 회원은 주문을 여러번 할 수 있다.
- 주문 할때 여러개의 상품을 선택 할 수 있다.
- 같은 상품도 여러번 주문이 가능하다.
- 주문과 상품 사이에 다대다 관계를 주문 상품을 넣어 1:N, N:1 로 풀어낸다.
테이블 설계
각각 도메인은 다음과 같은 속성을 가진다.
그것을 테이블로 만들었다.
엔티티 설계와 매핑
엔티티설계는 다음과 같다.
구현
Member(회원)
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
// 이렇게 규약을 정해주면 알아보기 쉽다.
@Column(length = 10)
private String name;
private String city;
private String street;
private String zipCode;
}
참고사항
- Id 필드
@Column(name = "MEMBER_ID"): DB 저장시 저장될 컬럼명을 지정해주었다.
@Id: 기본키 로 지정했다.
@GeneratedValue: 자동으로 PK 값이 생성되도록 정의해 주었다. - name 필드
@Column(length = 10): 최대길이를 10으로 지정해 주었다.
Order(주문)
@Entity
@Table(name = "ORDERS")
public class Order {
@Id
@GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
// 누가 주문했는지 알기 위한 식별자
// 하지만 객체 지향 설계가 아니다.
// order에서 직접 멤버를 겟 하는게 객체지향 스럽다.
@Column(name = "MEMBER_ID")
private Long memberId;
//객체지향스럽게 멤버를 정의한다.
private Member member;
//DB 에 저장되는 컬럼 관례는 다음과 같다.
// ORDER_DATA 또는 order_date
// 캐멀을 언더스코어로 변경하는 것이 많다.
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
}
참고사항
- status 필드
@Enumerated(EnumType.STRING): DB 에 enum 타입을 저장할때 String으로 저장되게 설정.
OrderItem(주문상품)
@Entity
public class OrderItem {
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long orderId;
@Column(name = "ITEM_ID")
private Long itemId;
private int orderPrice;
private int count;
}
상품(Item)
@Entity
public class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
참고: https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21695?tab=curriculum&speed=1
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 학습 페이지
지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....
www.inflearn.com
728x90
반응형