들어가기에 앞서
-예제에서 쉽게 설명하기 위해서 엔티티클래스에 setter 및 getter를 모두 열어두어
단순하게 설계를 할 것이다.
-실무에서는 getter는 열고, setter는 꼭 필요할 때에만 사용하는 것을 추천한다.
1. 회원엔티티개발
실습
설명
회원엔티티개발
a. jpabook.jpashop에 Package를 domain이라고 만든다.
-여기에 핵심 엔티티들을 설치 할 것이다.
b. 회원엔티티 작성
-List, ArrayList import class를 해줌
c. Address, Order 클래스 파일 생성
c. 회원테이블 이름 매핑
-@Id, @generatedValue, @Columns 어노테이션 세팅
2.주소값 타입 개발
실습
설명
a. address주소 클래스에서 코드작성
@Embeddable 어노테이션 사용
-address 주소가 어딘가에 내장될 수 있게 하기 위해 사용
@Getter 어노테이션을 열어두기
b.회원엔티티(RealMember)클래스파일에서 내장타입관련 어노테이션 세팅
-Address변수에 내장타입을 포함했다라는 @Embedded 어노테이션으로 매핑을 해주었다.
-Address변수에 @Embedded 하나만 있어도 되지만, 대개 두가지 어노테이션을 많이 사용한다.
3. 주문(order)엔티티클래스파일에서
실습
설명
a.주문엔티티클래스파일에서
-@Entity, @Table 이름 설정을 했다.
-@Table(name = "orders")라고 해주지 않으면
public class Order에서 Order의 관례로 이름이 Order가 되어 버리기 때문에 이름 설정을 해주어야 한다.
b.order_id
-DB컬럼의 id이름을 테이블명으로 가져와 테이블명_id형태로 설정해준다.
DBA포지션 엔지니어가 이러한 형태로 설정해주는 것을 원한다.
참고
엔티티의 식별자는 id를 사용하고 PK 컬럼명은 member_id를 사용했다. 엔티티는 타입(여기서는 Member)이 있으므로 id 필드만으로 쉽게 구분할 수 있다. 테이블은 타입이 없으므로 구분이 어렵다.
그리고 테이블은 관례상 테이블명 + id를 많이 사용한다.
참고로 객체에서 id 대신에 memberId를 사용해도 된다. 중요한 것은 일관성이다.
c.@ManyToOne
-주문과 회원의 관계, 다대 1관계를 설정해주는 어노테이션
d.@JoinColumn(name = "member_id")
-@JoinColumn 어노테이션은 외래 키를 매핑 할 때 사용
e.name 속성에는 매핑 할 외래키(연관관계주인) 이름지정
-member_id = foregien key(외래키)
-주문회원테이블에서 주문회원에 대한 정보를 매핑
4. 회원엔티티클래스(RealMember)에서
실습
a.어노테이션 설정
@OneToMany
-회원과 주문의 관계, 1대 다 관계를 설정해주는 어노테이션
@OneToMany (mapped by = "member")
-foreign key가 있는 order클래스에 있는 member가 연관관계의 주인이다.
-mapped by - order 테이블에 있는 member필드에 의해 맵핑된 거울일 뿐이야라는 뜻
-여기에 무엇을 넣는다고 해서 order에 있는 member필드의 foreign key 값이 변경되지
않는다.
-order엔티티클래스에 있는 order테이블에 있는 member필드 값을 변경하면
member_id의 foreign key 값이 변경된다.
어노테이션 설명 참고
https://docs.oracle.com/javaee/6/api/index.html
어노테이션이 궁금하다면 java.persistence -> annotation type을 클릭하면 어노테이션 설명을 볼 수 있다.
'신입개발자로 취업하기까지 > JPA쇼핑몰기능구축' 카테고리의 다른 글
20200516 도메인분석설계_엔티티클래스 개발 1-3 (0) | 2020.06.07 |
---|---|
20200511 도메인분석설계_엔티티클래스 개발 1-2 (0) | 2020.05.27 |
20200506 도메인분석설계_도메인모델과 테이블설계_2-4 (0) | 2020.05.19 |
20200506 도메인분석설계_도메인모델과 테이블설계_2-3 (0) | 2020.05.18 |
20200505 도메인분석설계_도메인모델과 테이블설계_2-2 (0) | 2020.05.17 |