<aside>
❗
JPA ??
- Java Persistence API
- 자바 진영의 ORM 기술 표준
</aside>
<aside>
❗
ORM ??
- Object Relational Mapping(객체 관계 매핑)
객체랑 RDB랑 매핑해주는 기술
객체는 객체대로 설계
- 관계형 데이터베이스는
관계형 데이터베이스대로 설계
ORM 프레임워크가 중간에서 매핑
- 대중적인 언어에는 대부분 ORM 기술이 존재
</aside>
<aside>
❗
JPA는 애플리케이션과 JDBC 사이에서 동작

이전에는 개발자가 직접 JDBC API를 사용했다면
그것을 JPA가 대신 해준다.
</aside>
<aside>
❗
JPA 동작 - 저장

- DAO를 통해서 JAP에 객체를 전달하면
- JPA가 Entity를 분석
INSERT SQL 생성
JDBC API 사용
패러다임 불일치 해결
- 자바 컬렉션에 저장하듯이 한 줄 코드만 넣으면 된다.
</aside>
<aside>
❗
JPA 동작 - 조회

- 조회할 때 필요한 데이터를 JPA에 전달
- JPA가 SELECT SQL 생성
JDBC API 사용
ResultSet 매핑
패러다임 불일치 해결
- Entity Object를 만들어서 반환해준다.
</aside>
<aside>
❗
JPA는 표준 명세
JPA는 인터페이스 모음
- JPA 2.1 표준 명세를 구현한 대표적인 3가지 구현체
하이버네이트
, EclipseLink, DataNucleus
- 2.0 이후로는 크게 바뀔만한 게 없다.

</aside>
<aside>
❗
JPA를 왜 사용해야 하는가 ??
- SQL 중식점인 개발에서
객체 중심으로 개발 !!!!
- 생산성
- 유지보수
- 패러다임 불일치 해결
- 성능
- 데이터 접근 추상화와 벤더 독립성
- 표준
</aside>
<aside>
❗
생산성 - JPA와 CRUD
- 저장 - jpa.persist(member)
자바 컬렉션에 저장하듯이 저장됨
- 조회 - Member member = jpa.find(memberId)
- 수정 - member.setName(”변경할 이름”)
트랜잭션 안에서 데이터를 조회한 다음에 데이터를 변경하면
트랜잭션이 끝나는 시점에 데이터가 자동으로 업데이트 쿼리가 DB로 간다.
- 삭제 - jpa.remove(member)
</aside>
<aside>
❗
유지보수
기존에는
필드 변경시 모든 SQL 수정해야 함

JPA는 객체에 필드만 추가
하면 됨, SQL은 JPA가 처리

</aside>
<aside>
❗
JPA와 패러다임의 불일치 해결
- JPA와 상속
- JPA와 연관관계
- JPA와 객체 그래프 탐색
- JPA와 비교하기
</aside>