์Šคํ”„๋ง

JPA ํ™œ์šฉ ํ”„๋กœ์ ํŠธ - (1) ๋„๋ฉ”์ธ ๋ถ„์„

walbe0528 2022. 5. 10. 20:39
728x90
๋ฐ˜์‘ํ˜•

 

 

๐Ÿ’ก  ๊ตฌํ˜„ ๋ชฉํ‘œ ๊ธฐ๋Šฅ

 

  1. ํšŒ์› ๋“ฑ๋ก/์กฐํšŒ
  2. ์ƒํ’ˆ ๋“ฑ๋ก/์ˆ˜์ •/์กฐํšŒ (*์ƒํ’ˆ์€ ๋„์„œ, ์Œ๋ฐ˜, ์˜ํ™” 3๊ฐœ์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ + ์ฃผ๋ฌธ์‹œ ๋ฐฐ์†ก์ •๋ณด ์ž…๋ ฅ)
  3. ์ฃผ๋ฌธ ๋“ฑ๋ก/์กฐํšŒ/์ทจ์†Œ
  4. ์žฌ๊ณ  ๊ด€๋ฆฌ

๐Ÿ’ก ์˜์กด์„ฑ ์ถ”๊ฐ€

  • Spring Web Starter
  • Thymeleaf
  • Spring Data JPA
  • MariaDB Driver
  • Lombok

 

๐ŸŽˆ ํ…Œ์ด๋ธ” ์„ค๊ณ„

 

์ผ๋Œ€๋‹ค ๊ด€๊ณ„์—์„œ๋Š” ๋‹ค์ชฝ์— ๋ฌด์กฐ๊ฑด ์™ธ๋ž˜ํ‚ค๊ฐ€ ์กด์žฌํ•œ๋‹ค. (-> ์™ธ๋ž˜ํ‚ค๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์œผ๋กœ ์ •ํ•˜๋ฉด ๋œ๋‹ค.) !! ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ๋Š” ๊ฐ€๊ธ‰์  ์–‘๋ฐฉํ–ฅ๋ณด๋‹จ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

  • Member ์—”ํ‹ฐํ‹ฐ
@Entity
@Getter @Setter
public class Member {

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

    private String name;

    @Embedded  // Embeddable, Embedded ๋‘˜ ์ค‘์— ํ•˜๋‚˜๋งŒ ์ ์–ด์ค˜๋„ ๋œ๋‹ค
    private Address address;

    @OneToMany(mappedBy = "member")  // Orderํ…Œ์ด๋ธ”์— ์žˆ๋Š” member์— ๋งคํ•‘. ์—ฌ๊ธฐ์„œ๋Š” ์ฝ๊ธฐ์ „์šฉ์ด ๋œ๋‹ค.
    private List<Order> orders = new ArrayList<>();
}

 

@OneToMany(mappedBy = "member") : Member <-> Order, ์ผ๋Œ€๋‹ค์˜ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„

Orderํ…Œ์ด๋ธ”์— ์žˆ๋Š” member์— ๋งคํ•‘๋œ๋‹ค. 

mappedBy๊ฐ€ ๋ถ™์€ ์—”ํ‹ฐํ‹ฐ๋Š” ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์ด ์•„๋‹ˆ๋‹ค.  Orderํ…Œ์ด๋ธ”์—์„œ member๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋œ๋‹ค. 

 

  • Order ์—”ํ‹ฐํ‹ฐ
@Entity
@Getter @Setter
@Table(name = "orders")
public class Order {

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

    @ManyToOne(fetch = LAZY)
    @JoinColumn(name= "member_id")  // FK์˜ ์ด๋ฆ„์ด member_id
    private Member member;

    @OneToMany(mappedBy= "order", cascade = CascadeType.ALL)
    private List<OrderItem> orderItems = new ArrayList<>();  // ์ฃผ๋ฌธํ•œ ์ƒํ’ˆ ๋ชฉ๋ก

    @OneToOne(fetch = LAZY, cascade = CascadeType.ALL)  // order์ €์žฅ์‹œ delivery๋„ ํ•จ๊ป˜ persist
    @JoinColumn(name = "delivery_id")
    private Delivery delivery;

    private LocalDateTime orderDate;  // ์ฃผ๋ฌธ ์‹œ๊ฐ„(์‹œ๊ฐ„,๋ถ„๊นŒ์ง€)

    @Enumerated(EnumType.STRING)
    private OrderStatus status;  // ์ฃผ๋ฌธ์˜ ์ƒํƒœ(ORDER, CANCEL)
}

 

  • OrderItem ์—”ํ‹ฐํ‹ฐ
@Entity
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "order_item")
public class OrderItem {

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

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

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

    private int orderPrice;  // ์ฃผ๋ฌธ ๊ฐ€๊ฒฉ

    private int count;  // ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰

 

728x90