[SECTION21. JPA(Java Persistence API)]
● JPA(Java Persistence API) = 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스의 모음(표준 명세)
[JPA는 인터페이스]
↓ 구현체
[Hibernate] ← 가장 많이 사용 (사실상 표준)
[EclipseLink]
[DataNucleus]
Spring Data JPA는 JPA를 더 편리하게 쓸 수 있도록
Spring이 제공하는 추상화 레이어입니다.
Spring Data JPA
└── JPA (표준 인터페이스)
└── Hibernate (구현체)
└── JDBC
└── DB
● ORM (Object-Relational Mapping) = 객체와 관계형 DB의 테이블을 자동으로 매핑해주는 기술
[Java 객체] ←──── ORM ────→ [DB 테이블]
Member MEMBER
- id ←──────────→ ID
- name ←──────────→ NAME
- email ←──────────→ EMAIL
ORM을 사용하면 개발자는 SQL이 아닌 객체에 집중할 수 있습니다.
// 이것만 작성하면
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
private String email;
private String phone; // ← 필드 추가해도 SQL 수정 불필요!
}
// JPA가 알아서 처리
em.persist(member); // → INSERT SQL 자동 생성
em.find(Member.class, id); // → SELECT SQL 자동 생성
Order order = em.find(Order.class, orderId);
// 실제로 접근할 때 SQL 실행 (Lazy Loading)
Member member = order.getMember(); // ← 이 시점에 SELECT 실행
Member member = em.find(Member.class, id);
member.setName("새이름"); // ← setName만 해도
// 트랜잭션 종료 시 JPA가 자동으로 UPDATE SQL 실행!
// em.update() 같은 메서드 없음
[SQL Mapper 계열] [ORM 계열]
iBatis / MyBatis vs JPA / Hibernate
SQL을 직접 작성 SQL을 자동 생성
SQL에 종속적 객체 중심
학습 곡선 낮음 학습 곡선 높음