도메인 개발

bin1225·2021년 10월 14일
0
post-thumbnail

도메인 개발

구성

  • 기존에 진행했던 구조

여기서 카테고리와 배송 엔티티는 추후에 추가하는 걸로 하고, 상품의 상속관계도 나중에 새롭게 추가하기로 하였다.

  • Member

package hello.toyProject_1.domain;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.ArrayList;

@Entity
@Getter @Setter
public class Member {

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

    private String name;

    @Embedded
    private Address address;

//    private Integer age;
//    private String email;
//    private String phoneNumber;

//    private List<Order> orderList = new ArrayList<>();
}

기술 설명

- @Entity 어노테이션으로 JPA에서 엔티티로 관리하게 설정한다.
- @Getter, @Setter 은 lombok에서 지원하는 어노테이션
- @Id : 해당 값을 pk로 지정
- @GeneratedValue : JPA가 영속성 컨텍스트에 영속시킬 때 값을 자동으로 생성해준다.
- 주석 처리
추가적인 속성은 추후에 html 파일에 맞춰서 추가할 예정, 수업에서는 처음부터 양방향 관계로 설정했는데, 최대한 단방향으로 설계하고 필요시에 양방향으로 바꾸라고 배웠기 때문에 일단은 필요를 느낄 때까지 단방향만 설계해두고 진행할 것이다.

  • Order

package hello.toyProject_1.domain;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.List;

@Entity
@Getter
@Setter
@Table(name = "orders")
public class Order {

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

    @ManyToOne
    @JoinColumn(name ="member_id")
    private Member member;

    @OneToMany(mappedBy = "order")
    private List<OrderItem> orderItems = new ArrayList<>();


}

기술 설명

테이블 명을 orders로 설정한 이유는 java 프로그램 자체에 order이라는 무언가가 있기 때문에 그냥 order로 설정하면 오류가 발생한다.
컬럼명은 소문자,언더바(_)를 이용한다.
List를 ArrayList로 초기화하는 이유는 null오류 처리 등 장점이 있다는데 아직 잘 이해 못했다.
Member와는 단방향 관계, xToOne 은 지연로딩으로 설정을 바꿔줘야 하기에 FetchType을 LAZY로 설정했다.

  • OrderItem

package hello.toyProject_1.domain;

import hello.toyProject_1.domain.item.Item;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;

@Entity
@Getter
@Setter
public class OrderItem {

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


    @ManyToOne
    @JoinColumn(name ="order_id")
    private Order order;

    @ManyToOne
    @JoinColumn(name ="item_id")
    private Item item;

    private int count;
}

Member 와 Order 사이에서 다대다 관계를 일대다, 다대일로 풀어주는 역할

  • Adress

package hello.toyProject_1.domain;


import lombok.Getter;

import javax.persistence.Embeddable;

@Embeddable
@Getter
public class Address {

    private String city;
    private String street;
    private String zipcode;
    protected Address(){

    }

    public Address(String city, String street,String zipcode) {
        this.city = city;
        this.street = street;
        this.zipcode = zipcode;
    }
}

Adress 는 값타입으로 @Embeddable 어노테이션을 붙여뒀다.
값타입은 엔티티와는 다르게 뭔가 저장하고 수정하는 기능이 없다. 다른 엔티티에서 이 값타입을 선언하여 값타입에 저장된 변수들을 사용한다. 중복되는 코드를 줄이고 명확하게 변수들을 그룹핑할 수 있다는 장점이 있다.
JPA동작을 위해 기본 생성자가 필요하기 때문에 protected Address(){} 생성자를 작성하였다.

  • Item

package hello.toyProject_1.domain.item;

import hello.toyProject_1.domain.OrderItem;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;

@Entity
@Getter
@Setter
public class Item {

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



    private String name;
    private int stockQuantity;
    private int price;

}

0개의 댓글

관련 채용 정보