Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

영속성 컨텍스트로 보는 JPA

8.554 visualizaciones

Publicado el

SLiPP 1차 세미나, 영속성 컨텍스트로 보는 JPA 발표 자료입니다.

Publicado en: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí

영속성 컨텍스트로 보는 JPA

  1. 1. 영속성 컨텍스트로 보는 JPA 2015.12.12 이경원(woniper)
  2. 2. 이경원(woniper) http://blog.woniper.net https://github.com/woniper leekw3747@gmail.com
  3. 3. 목차 JPA 소개 JDBC부터 JPA까지 영속성 컨텍스트 참고자료
  4. 4. JPA(Java Persistence API) 소개
  5. 5. Java ORM(Object-Relational Mapping) 표준 F/W RDB를 객체로 표현(매핑), 사용 Hibernate, Eclipse Link, TopLink Essensials 구현체
  6. 6. JDBC부터 JPA까지
  7. 7. JDBC Connection Query 생성 Resource Close
  8. 8. xBatis <select id="select" parameterType="java.lang.Integer" resultType=“User”> select userId, username, password from User where userId = #{userId} </select>
  9. 9. Query 작성 지겹지 않나요?
  10. 10. JPA
  11. 11. 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);
  12. 12. Connection, close Query 자동 생성 및 실행 데이터 자동 매핑
  13. 13. 엔티티(Entity) 생명주기
  14. 14. @Entity @Table(name = "User") public class User { @Id @GeneratedValue private 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; }
  15. 15. USER 비영속(NEW) USER 영속(Managed) 영속성 컨텍스트 persist() USER 삭제(Removed) remove() USER 준영속(Detached) detach()
  16. 16. 영속성 컨텍스트
  17. 17. 이점
  18. 18. 쓰기 지연 SQL(SQL 저장소) 자동 변경 감지 1차 캐시 엔티티 동일성 지연 로딩
  19. 19. 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
  20. 20. 1차 캐시 영역 @ID Entity Snapshot 1 User User SQL 저장 소 영속성 컨텍스트 J D B C
  21. 21. 영속성 컨텍스트는 어떻게 동작할까 ?
  22. 22. 입력(persist)
  23. 23. 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();
  24. 24. 조회(find)
  25. 25. EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); // 영속 엔티티 User user = em.find(User.class, 1); // 준영속 상태 em.getTransaction().commit(); em.close();
  26. 26. 수정(자동 변경 감지)
  27. 27. 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();
  28. 28. 삭제(remove)
  29. 29. 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();
  30. 30. 트랜잭션 단위에서 동작 commit() 호출 전 flush()
  31. 31. merge
  32. 32. 준 영속 엔티티 -> 영속 엔티티
  33. 33. merge를 알아보기 전에
  34. 34. 영속 엔티티 -> 준 영속 엔티티
  35. 35. em.clear(); em.detach(user); em.close();
  36. 36. EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); // 1. 영속 상태, username == woniper User 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();
  37. 37. EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); // 5. username 속성 값은? User user2 = em.find(User.class, 1); em.getTransaction().commit(); em.close();
  38. 38. user2에 username은 lee-kyung-won
  39. 39. 속성이 변경된 준영속 엔티티 merge : update 비영속 엔티티 merge : insert
  40. 40. 참고자료
  41. 41. http://www.tutorialspoint.com/jpa/ http://www.objectdb.com/ https://en.wikibooks.org/wiki/Java_ Persistence
  42. 42. http://goo.gl/xzpTdK https://goo.gl/sqmO9p https://goo.gl/GhsI4Q https://goo.gl/GpQzeL
  43. 43. 감사합니다.

×