Spring MVC Pattern
Controller
사용자의요청을 처리 한 후, 지정된
View 에 Model 객체를 넘겨준다
Service
사용자의 요청에 따라서 Repository 에서 넘어
온 데이터를 가공하여 Controller 에게 전달한
다
Repository
DB 에 접근하여 데이터를 받아온다
JPA
JPA
Java Persistence API
Java진영의 ORM 표준 기술
ORM
Object-Relational Mapping (객체 관계 매핑)
- 객체와 관계형 데이터베이스(RDB)의 중간에서 ORM 이 매핑
8.
entityManager.persist(theIt
em);
INSERT INTO ITEM
VALUES(…)
저장
Item theItem = entityManager.find(Item.class,
itemId);
SELECT I.* FROM ITEM WHERE ITEM_ID
= :itemId
조회
entityManager.remove(the
Item);
DELETE FROM Item
WHERE (…)
삭제
theItem.setItemName(“newItem
Name”);
UPDATE ITEM SET
ITEM_NAME =
‘newItemName’ WHERE
수정
Persistence Context
영속성 컨텍스트
Entity를 영구 저장하는 환경
• 비영속 - Transient | New
엔티티 객체 생성 직후의 순수한 객체 상태. 영속
성 컨텍스트, 데이터베이스와는 전혀 관련 없음
• 영속 - Managed
Entity Manager 를 통해 영속성 컨텍스트에 저장.
영속성 컨텍스트의 관리하에 놓인 상태
• 준영속 - Detached
영속성 컨텍스트의 관리하에 있던 엔티티가 관리
상태를 벗어나면 준영속 상태가 된다
영속성 컨텍스트를 초기화해도 엔티티는 준영속
상태가 된다
삭제 – Removed
엔티티를 영속성 컨텍스트와 데이터베이스에서
삭제
11.
Persistence Context
영속성 컨텍스트
영속성컨텍스트를 사용하면 생기는 이점들
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지 (Dirty Checking)
- 지연 로딩 (Lazy Loading)
12.
Persistence Context
영속성 컨텍스트
영속성컨텍스트를 사용하면 생기는 이점들
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지 (Dirty Checking)
- 지연 로딩 (Lazy Loading)
13.
Persistence Context
영속성 컨텍스트
영속성컨텍스트를 사용하면 생기는 이점들
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지 (Dirty Checking)
- 지연 로딩 (Lazy Loading)
14.
Persistence Context
영속성 컨텍스트
영속성컨텍스트를 사용하면 생기는 이점들
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지 (Dirty Checking)
- 지연 로딩 (Lazy Loading)
Query 문을 DB로 전송하는 시점
Transaction 이 종료되기 전 – transaction.commit();
EntityManager 를 flush 했을 때 – entityManager.flush();
15.
Persistence Context
영속성 컨텍스트
영속성컨텍스트를 사용하면 생기는 이점들
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지 (Dirty Checking)
- 지연 로딩 (Lazy Loading)
영속성 컨텍스트에서 보관하는 데이터에 변경이 일어났는지 확인
데이터 변경이 일어났다면?
• JPA가 UPDATE 쿼리문 날려줌
• 즉, 값 변경 후 update 쿼리문 날릴 코드가 필요 없음
16.
Persistence Context
영속성 컨텍스트
영속성컨텍스트를 사용하면 생기는 이점들
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지 (Dirty Checking)
- 지연 로딩 (Lazy Loading)
엔티티를 DB에서 가져올 때 만약 연관 관계를 가진 다른 객체를 가지고 있
다면?
• 즉시 로딩: 엔티티 조회할 때 연관된 객체도 함께 DB에서 조회
• 지연 로딩: 연관된 객체는 조회x, 나중에 필요하면 그 때 DB에서 가
져옴
각 연관 관계마다 즉시 로딩, 지연 로딩 설정 가능