Closed BETTERFUTURE4 closed 2 years ago
현재는 객체를 관계형DB에 저장하는 시대이다!
객체
관계형DB
CRUD SQL
reference
PK
FK
join
출처 : https://bros.tistory.com/m/16
DB
자바 진영의 ORM 표준 기술
자바
ORM
Object-relational mapping
하이버네이트
EclipseLink
DataNucleus
jpa.persist(member) //저장 Member member=jpa.find(memberId) // 조회 member.setName(“변경할 이름”) //수정 jpa.remove(member) //삭제
SQL
JPA
class MemberService { //... public void process() { Member member = memberDAO.find(memberId); member.getTeam(); //자유로운 객체 그래프 탐색 } }
Isolation
Repeatable Read
JDBC BATCH SQL
지연 로딩
즉시 로딩
JOIN SQL
EntityManagerFactory
EntityManager
영속성 컨텍스트
PersistContext
EntityManager.persist(entity);
Member member=new Member("1L", "헌치");
EntityManager em=emf.createEntityManager(); em.getTransaction().begin(); em.persist(member); //객체를 저장
em.detach(member);
em.remove(member);
em.find
transaction.begin();
em.persist(memberA);
transaction.commit();
Dirty Checking
// 영속 엔티티 데이터 수정 memberA.setUsername("hi"); memberA.setAge(10); //-> 커밋 시 자동으로 데이터 업데이트
em.flush()
FlushModeType.AUTO
FlushModeType.COMMIT
em.detach(entity)
em.clear()
em.close()
섹션 1 : JPA 소개
1. JPA 도입 배경
현재는
객체
를관계형DB
에 저장하는 시대이다!1) SQL 의존적 개발
CRUD SQL
을 수정2) 패러다임의 불일치
1] 객체 vs 관계형데이터베이스(RDB)
reference
: 단방향, 양방향시 순환참조 문제...?), 관계형데이터베이스는PK
/FK
로join
(양방향)2] 객체 그래프 탐색
출처 : https://bros.tistory.com/m/16
3) 객체 동일성 보장 X
DB
에서는 다른 엔티티가 됨2. JPA란?
자바
진영의ORM
표준 기술1) ORM
Object-relational mapping
(객체 관계 매핑)2) JPA
하이버네이트
,EclipseLink
,DataNucleus
3) JPA의 장점
1] 생산성 향상
2] 유지보수
SQL
은JPA
가 처리3] 패러다임의 불일치 해결
4] 엔티티 계층을 신뢰
5] 성능 최적화
Isolation
Level ...Repeatable Read
보장JDBC BATCH SQL
기능을 사용해서 한번에SQL
전송지연 로딩
: 객체가 실제 사용될 때 로딩즉시 로딩
:JOIN SQL
로 한번에 연관된 객체까지 미리 조회섹션 3 : 영속성 컨텍스트
EntityManagerFactory
:EntityManager
생성. 1개만 필요EntityManager
: 엔티티의 CRUD 일 처리영속성 컨텍스트
와 n대 1 관계가 될 수도 있지만, 기본적으론 1대1 관계1. 영속성 컨텍스트(
PersistContext
)EntityManager.persist(entity);
사용1) 엔티티의 생명주기
1] 비영속(new/transient)
2] 영속(managed)
3] 준영속(detached)
4] 삭제(removed)
2. 영속성 컨텍스트의 이점
1) 1차 캐시 코드 조회(사실 성능 이점이 크진 않음)
2) 영속 엔티티의 동일성 보장
em.find
로 가져온 두 값의 동일성을 보장한다.3) 트랜잭션을 지원하는 쓰기 지연
transaction.begin();
: 트랜잭션 시작em.persist(memberA);
: SQL 저장소에 데이터들을 저장transaction.commit();
: 커밋 시 한번에 DB에 전송4) 변경 감지(
Dirty Checking
)3. 플러시
1) 플러시 발생
2) 플러시 호출 방법
em.flush()
: 직접 호출(자주 안씀)3) 플러시 모드
FlushModeType.AUTO
: 커밋이나 쿼리실행 시 플러시(기본값)FlushModeType.COMMIT
: 커밋 시 플러시4. 준영속
1) 준영속 상태 만드는 법
em.detach(entity)
: 특정 엔티티만 준영속 상태로 전환em.clear()
: 영속성 컨텍스트를 완전히 초기화em.close()
: 영속성 컨텍스트를 종료