RDBMS와 객체지향 간의 중간에서 2개를 매핑하는 역할을
ORM
이라고 한다.
JPA
는 이런 ORM의 표준 명세로 자바에서 제공하는API
이다.
JPA
는 인터페이스이고, 이를 구현한 구현체가 대표적으로Hibernate
등이 있다.
1. 특정 DB에 종속되지 않음
- 설정 파일에서 사용할 DB 변경 가능
2. 객체지향 프로그래밍
3. 생산성 향상
- DB에 새로운 칼럼 추가 시, DTO 클래스의 필드도 모두 변경해야 함.
- JPA는 매핑 클래스에 필드만 추가하면 끝!
( DAO : DB의 data에 접근하기 위한 객체 )
( DTO : 계층 간 데이터 교환을 하기 위한 객체 )
1. 복잡한 쿼리 처리
- 복잡하면 SQL 사용 권장
- 이를 보완한 JPQL이 존재
2. 성능 저하 위험
3. 학습 시간
메소드 | 내용 |
---|---|
find() | 영속성 컨텍스트에 Entity 검색 후, 없으면 DB에서 해당 데이터 찾아 영속성 컨텍스트에 저장 |
persist() | Entity를 영속성 컨텍스트에 저장 |
remove() | Entity 클래스를 영속성 컨텍스트에서 삭제 |
flush() | 영속성 컨텍스트에 저장된 내용을 DB에 반영 |
생명주기 | 내용 |
---|---|
new | PC와 관련 없는 상태 |
managed | Entity가 PC에 저장되어 관리되는 상태 / 커밋 시점에 DB 반영 |
detached | PC에 저장되었다가 분리된 상태 |
removed | PC와 DB에서 삭제된 상태 |
Item item = new Item(); // PC와 관련없음
item.setItemNm("테스트 상품");
EntityManager em = entityManagerFactory.createEntityManager();
// EntityManager 생성
EntityTransaction transaction = em.getTransaction();
// 데이터 변경 시, 무결성 위해 트랜잭션 필수!
em.persist(item);
// PC에 저장된 상태. 아직 SQL X
transaction.commit(); // 트랜잭션을 DB에 반영
em.close(); // 자원 반환
emf.close();
스냅샷
을 가짐.UPDATE
를 쓰기 지연 저장소
에 보관함.다음 챕터에선 본격적으로 프로젝트를 만들어보자