JPA ( Java Persistence API )
- 자바 객체와 관계형 DB 사이를 매핑하는 ORM 기술 표준
- 스프링에서 제공하는 것이 아닌, JAVA 에서 제공하는 API
- 라이브러리가 아닌, 인터페이스
구동방식
- 설정 정보를 조회 및 기준으로 하여 EntityManagerFactory를 생성한다.
EntityManager는 하나만 생성하여 공유한다.
- EntityManagerFactory 를 통해 EntityManager 가 생성된다
EntityManager는 쓰레드간 절대 공유하지 않는다. 사용하고 폐기한다.
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행한다.
조회를 제외한 등록, 수정, 삭제 모두
META-INF/persistence.xml 예제
-persistence-unit name 을 확인한다.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<properties>
<!-- 필수 속성 -->
... 생략 / DB 설정
<!-- 옵션 -->
... 생략 / 콘솔 SQL 나타내는 설정
</properties>
</persistence-unit>
</persistence>
생성 및 사용 예제
- 트랜잭션을 시작해주어야 한다.
- 로직이 끝나면 닫아주어야 한다
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // 팩토리 생성
EntityManager em = emf.createEntityManager(); // manager 생성
EntityTransaction tx = em.getTransaction(); // 트랜잭션 생성
tx.begin(); // 트랜잭션 시작
try {
...
tx.commit(); // DB 에 저장
} catch (Exception e) {
tx.rollback(); // 예외 발생 시 롤백 진행
} finally {
em.close(); // manager close
}
emf.close(); // factory close
}
}
동작과정
그림을 통해 어떤 순서로 동작하는지 확인
1. 개발자가 JAVA 애플리케이션에서 JPA를 사용
2. JPA 내부에서 JDBC API를 사용
3. SQL을 호출해서 DB와 통신
1. MemberDAO에서 객체를 저장하고 싶을 때 persist(영속하다) 라는 메서드를 호출해 저장한다.
2. Member 엔티티를 분석한다.
3. Insert SQL 을 JPA가 생성한다.
4. JDBC API를 사용해서 DB에 SQL 문을 날린다.
1. Member 의 PK 값을 JPA에게 전달한다.
2. 엔티티 매핑정보를 적절한 SELECT SQL을 생성해서 DB 에 날린다.
3. DB 로 부터 결과를 받아온다
Hibernate은 JPA 인터페이스를 구현한 ORM 프레임워크이다.
참고
- 인프런 자바 ORM 표준 JPA 프로그래밍 - 기본편
https://taesan94.tistory.com/207
'Spring > JPA' 카테고리의 다른 글
영속성 컨텍스트 - 변경 감지 (0) | 2022.09.20 |
---|---|
영속성 컨텍스트 - 쓰기 지연 (0) | 2022.09.20 |
영속성 컨텍스트 - 동일성보장 (0) | 2022.09.20 |
영속성 컨텍스트 - 1차 캐시 (0) | 2022.09.20 |
영속성 컨텍스트 - 엔티티 생명주기 (0) | 2022.09.20 |
댓글