-
JPA (Java와 DB 연동)스프링 2023. 4. 15. 00:32
ORM : 객체 관계 매핑 기술
JPA : Java Persistence API 자바 ORM 기술에 대한 표준 명세
JPA는 아래와 같은 일들을 해줍니다.
- 쿼리를 자동으로 만들어 줍니다.
- 그리고 어플리케이션 계층에서 sql 의존성을 줄여서 번거로운 작업이 매우매우 단축됩니다.
- 패러다임의 불일치를 해결해줍니다. 이와 관련된 내용으로는 매우 다양한 예시가 있지만, 지금 모두 이야기하게는 너무 많은 것 같습니다.
- 특정한 상황을 제외하고는,성능도 챙겼습니다. 최적화를 위한 노력이 있었습니다..
- 방언도 지원해줍니다. 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값 허용하지 않음
'스프링' 카테고리의 다른 글
스프링부트 (타임스탬프,오전 1시 마다 가격 업데이트) (0) 2023.04.20 스프링 부트 (메모장만들기) * (0) 2023.04.17 IoC 와 DI 용어 이해하기 (0) 2023.04.15 스프링 ㅡMVC (Response, Request) (0) 2023.04.15 SQL (Query문) (0) 2023.04.14