59
영영영 영영영영영 영영 JPA 2015.12.12 영영영 (woniper)

영속성 컨텍스트로 보는 JPA

  • Upload
    -

  • View
    6.207

  • Download
    2

Embed Size (px)

Citation preview

Page 1: 영속성 컨텍스트로 보는 JPA

영속성 컨텍스트로 보는 JPA

2015.12.12이경원 (woniper)

Page 2: 영속성 컨텍스트로 보는 JPA

이경원 (woniper)

http://blog.woniper.nethttps://github.com/[email protected]

Page 3: 영속성 컨텍스트로 보는 JPA

목차JPA 소개

JDBC 부터 JPA까지 영속성 컨텍스트

참고자료

Page 4: 영속성 컨텍스트로 보는 JPA

JPA(Java Persistence API) 소개

Page 5: 영속성 컨텍스트로 보는 JPA

Java ORM(Object-Relational Mapping) 표준 F/W

RDB 를 객체로 표현 (매핑 ), 사용Hibernate, Eclipse Link, TopLink Essensials 구현체

Page 6: 영속성 컨텍스트로 보는 JPA

JDBC 부터 JPA 까지

Page 7: 영속성 컨텍스트로 보는 JPA

JDBC

Connection

Query 생성

Resource Close

Page 8: 영속성 컨텍스트로 보는 JPA

xBatis

<select id="select" parameterType="java.lang.Integer" resultType=“User”>

select userId, username, password from User where userId = #{userId}

</select>

Page 9: 영속성 컨텍스트로 보는 JPA

Query 작성 지겹지 않나요 ?

Page 10: 영속성 컨텍스트로 보는 JPA

JPA

Page 11: 영속성 컨텍스트로 보는 JPA

EntityManager em = entityManagerFactory.createEntityManager();

1. Insert

em.persist(user);

2. Select

User user = em.find(User.class, 1);

3. Update

user.setUsername("update Name");user.setPassword("1111");

4. Delete

em.remove(user);

Page 12: 영속성 컨텍스트로 보는 JPA

Connection, close

Query 자동 생성 및 실행

데이터 자동 매핑

Page 13: 영속성 컨텍스트로 보는 JPA

엔티티 (Entity) 생명주기

Page 14: 영속성 컨텍스트로 보는 JPA

@Entity@Table(name = "User")public class User {

@Id @GeneratedValueprivate Integer userId;

@Column(name = "username", nullable = false)private String username;

@Column(name = "password", nullable = false)private String password;

@Column(name = "nickName", nullable = true)private String nickName;

}

Page 15: 영속성 컨텍스트로 보는 JPA

USER

비영속 (NEW)

USER

영속 (Managed)

영속성 컨텍스트persist()

USER

삭제 (Removed)

remove()

USER

준영속 (Detached)

detach()

Page 16: 영속성 컨텍스트로 보는 JPA

영속성 컨텍스트

Page 17: 영속성 컨텍스트로 보는 JPA

이점

Page 18: 영속성 컨텍스트로 보는 JPA

쓰기 지연 SQL(SQL 저장소 )

자동 변경 감지1 차 캐시

엔티티동일성 지연로딩

Page 19: 영속성 컨텍스트로 보는 JPA

EntityManagerFactory emf = Persistence.createEntityManagerFactory(“persistence");

1 차 캐시 영역@ID Entity Snapshot

SQL 저장소EntityManager em1 = emf.createEntityManager();

em1

1 차 캐시 영역@ID Entity Snapshot

SQL 저장소

EntityManager em2 = emf.createEntityManager();

em2

Page 20: 영속성 컨텍스트로 보는 JPA

1 차 캐시 영역@ID Entity Snapshot

1 User User

SQL 저장소 영속성 컨텍스트

JDBC

Page 21: 영속성 컨텍스트로 보는 JPA

영속성 컨텍스트는 어떻게 동작할까 ?

Page 22: 영속성 컨텍스트로 보는 JPA

입력 (persist)

Page 23: 영속성 컨텍스트로 보는 JPA

EntityManager em = emf.createEntityManager();em.getTransaction().begin();

// 비 영속 상태User user = new User("wons", "12345", "woniper");

// 영속 상태// 1 차 캐시 저장 , Query 생성 및 저장em.persist(user);

// 준영속 상태// SQL 저장소 Query DB 에 반영em.getTransaction().commit();em.close();

Page 24: 영속성 컨텍스트로 보는 JPA
Page 25: 영속성 컨텍스트로 보는 JPA
Page 26: 영속성 컨텍스트로 보는 JPA
Page 27: 영속성 컨텍스트로 보는 JPA

조회 (find)

Page 28: 영속성 컨텍스트로 보는 JPA

EntityManager em = emf.createEntityManager();em.getTransaction().begin();

// 영속 엔티티User user = em.find(User.class, 1);

// 준영속 상태em.getTransaction().commit();em.close();

Page 29: 영속성 컨텍스트로 보는 JPA
Page 30: 영속성 컨텍스트로 보는 JPA
Page 31: 영속성 컨텍스트로 보는 JPA
Page 32: 영속성 컨텍스트로 보는 JPA

수정 ( 자동 변경 감지 )

Page 33: 영속성 컨텍스트로 보는 JPA

EntityManager em = emf.createEntityManager();em.getTransaction().begin();

// 영속 상태// 1 차 캐시 저장User user = em.find(User.class, 1);

// 자동 변경 감지user.setUserName("updateName");user.setPassword("1111");user.setNickName("updateNick");

// 준영속 상태em.getTransaction().commit();em.close();

Page 34: 영속성 컨텍스트로 보는 JPA
Page 35: 영속성 컨텍스트로 보는 JPA
Page 36: 영속성 컨텍스트로 보는 JPA
Page 37: 영속성 컨텍스트로 보는 JPA

삭제 (remove)

Page 38: 영속성 컨텍스트로 보는 JPA

EntityManager em = emf.createEntityManager();em.getTransaction().begin();

// 영속상태// 1 차캐시저장User user = em.find(User.class, 1);

// 삭제상태 , Query 생성및저장em.remove(user);

// SQL 저장소 Query DB 에반영em.getTransaction().commit();em.close();

Page 39: 영속성 컨텍스트로 보는 JPA
Page 40: 영속성 컨텍스트로 보는 JPA
Page 41: 영속성 컨텍스트로 보는 JPA
Page 42: 영속성 컨텍스트로 보는 JPA

트랜잭션 단위에서 동작commit() 호출 전 flush()

Page 43: 영속성 컨텍스트로 보는 JPA

merge

Page 44: 영속성 컨텍스트로 보는 JPA

준 영속 엔티티 -> 영속 엔티티

Page 45: 영속성 컨텍스트로 보는 JPA

merge 를 알아보기 전에

Page 46: 영속성 컨텍스트로 보는 JPA

영속 엔티티 -> 준 영속 엔티티

Page 47: 영속성 컨텍스트로 보는 JPA

em.clear();

em.detach(user);

em.close();

Page 48: 영속성 컨텍스트로 보는 JPA

EntityManager em = emf.createEntityManager();em.getTransaction().begin();

// 1. 영속 상태 , username == woniperUser user1 = em.find(User.class, 1);

// 2. 준영속 상태em.detach(user1);

// 3. username 속성 변경user.setUserName(“lee-kyung-won");

// 4. 영속 상태em.merge(user1);

em.getTransaction().commit();em.close();

Page 49: 영속성 컨텍스트로 보는 JPA

EntityManager em = emf.createEntityManager();em.getTransaction().begin();

// 5. username 속성 값은 ?User user2 = em.find(User.class, 1);

em.getTransaction().commit();em.close();

Page 50: 영속성 컨텍스트로 보는 JPA

user2 에 username 은lee-kyung-won

Page 51: 영속성 컨텍스트로 보는 JPA
Page 52: 영속성 컨텍스트로 보는 JPA
Page 53: 영속성 컨텍스트로 보는 JPA
Page 54: 영속성 컨텍스트로 보는 JPA

속성이 변경된 준영속 엔티티 merge :

update

비영속 엔티티 merge : insert

Page 55: 영속성 컨텍스트로 보는 JPA

참고자료

Page 56: 영속성 컨텍스트로 보는 JPA
Page 57: 영속성 컨텍스트로 보는 JPA

http://www.tutorialspoint.com/jpa/

http://www.objectdb.com/

https://en.wikibooks.org/wiki/Java_Persistence

Page 58: 영속성 컨텍스트로 보는 JPA

http://goo.gl/xzpTdK

https://goo.gl/sqmO9p

https://goo.gl/GhsI4Q

https://goo.gl/GpQzeL

Page 59: 영속성 컨텍스트로 보는 JPA

감사합니다 .