ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA (Java와 DB 연동)
    스프링 2023. 4. 15. 00:32

    ORM   :   객체 관계 매핑 기술

     

    JPA     :    Java Persistence API 자바 ORM 기술에 대한 표준 명세

     

    JPA는 아래와 같은 일들을 해줍니다.

    1. 쿼리를 자동으로 만들어 줍니다.
    2. 그리고 어플리케이션 계층에서 sql 의존성을 줄여서 번거로운 작업이 매우매우 단축됩니다.
    3. 패러다임의 불일치를 해결해줍니다. 이와 관련된 내용으로는 매우 다양한 예시가 있지만, 지금 모두 이야기하게는 너무 많은 것 같습니다.
    4. 특정한 상황을 제외하고는,성능도 챙겼습니다. 최적화를 위한 노력이 있었습니다..
    5. 방언도 지원해줍니다. h2 Databse를 붙여도, mySql, oracle 뭘 붙여도 코드의 변경은 없습니다, 관계형 db이자 표준을 준수한 sql을 지원한다면, jpa가 방언들도 알아서 처리해줍니다.

     

     

    ORM기술 특히 자바의 JPA가 다 해주는데, 쿼리는 왜 중요한지?

     

    일단 해당 쿼리를 발생시키는 개발자가 쿼리에 대하여 정확하게 이해하고 있어야 최적화-성능 등 다양한 이슈에 대응 할 수 있으며, 간혹 발생하는 실시간 처리 목표가 아닌 쿼리의 경우 쿼리를 직접 내야함

     

    자바는 객체와 레퍼런스로, 데이터베이스는 테이블사이의 관계(FK)로 정보 사이의 연관관계를 표현하고 처리한다


    JPA 샘플 코드

     

    @Entity // DB 테이블 역할을 합니다.


    public class User {
    // ID가 자동으로 생성 및 증가합니다.
      @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;

        // nullable: null 허용 여부
        // unique: 중복 허용 여부 (false 일때 중복 허용)
        @Column(nullable = false, unique = true)
        private String username;

        @Column(nullable = false)
        private String password;

        @Column(nullable = false, unique = true)
        private String email;

        @Column(nullable = false)
        @Enumerated(value = EnumType.STRING)
        private UserRoleEnum role;

        @Column(unique = true)
        private Long kakaoId;
    }


    연관관계

    일대다 (1:N) @OneToMany Order (1) : Food (N) 한명이 여러 음식을 주문함
    다대일 (N:1) @ManyToOne Order (N) : Food (1) 음식 한개가 여러명 한테 주문받음
    일대일 (1:1) @OneToOne Order (1) : Coupon (1) 배달 주문 1개 주문 시, 쿠폰 1개만 할인 적용 가능
    다대다 (N:N) @ManyToMany User (N) : Restaurant(N) 고객은 여러 음식 주문가능, 음식은 여러 고객을 받을 수 있음

    @Enitity  : 테이블 생성

    @Getter  : 값을 가져올 때 사용

    @NoArgsConstructor : 기본 생성자 추가

    (주로 같이 쓰임)

    @Id   :   아이디

    @GeneratedValue(strategy = GenerationType.IDENTITY)   :  데이터베이스에서 자동으로 ID 값을 생성하고 해당 객체의 ID 필드에 할당합니다.

    (-------------------)

    @Column(nullable = false)  :  열 null값 허용하지 않음

Designed by Tistory.