Spring Boot/JPA

JPA 소개

코블리_vv 2024. 9. 14. 10:38
728x90
반응형

1. 1차 캐시와 동일성 보장

같은 트랜잭션 안에서는 같은 엔티티를 반환 -> 약간의 조회 성능 향상

한번 조회를 하면 두번째 조회부터는 캐시에서 조회, SQL 1번만 실행

ex)

String memberId = "100";
Member m1 = jpa.find(Member.class, memberId);  // SQL 조회
Member m2 = jpa.find(Member.class, memberId);  // 캐시 조회

println(m1 == m2)  // true

 

2. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)

SELECT

트랜잭션을 커밋할 때까지 INSERT SQL을 모음

JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송

 

UPDATE

트랜잭션 커밋 시 UPDATE, DELETE SQL 실행하고, 바로 커밋

 

3. 지연 로딩과 즉시 로딩

지연 로딩 : 객체가 실제 사용될 때 로딩

즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회

// 지연로딩
Member member = memberDAO.find(memberId); // SELECT * FROM MEMBER
Team team = member.getTeam();
String teamName = team.getName();		  // SELECT * FROM TEAM


// 즉시로딩
Member member = memberDAO.find(memberId); // SELECT M.*, T.* FROM MEMBER JOIN TEAM
Team team = member.getTeam();
String teamName = team.getName();

 

 

JPA 구동 방식

META-INF/persistence.xml 파일에서 설정 정보 조회 -> EntityManagerFactory 생성 -> EntityManager 생성

em.persist(), em.find(), em.remove() 사용하여 객체 다룸

package hellojpa;

import jakarta.persistence.*;

public class JpaMain {

    public static void main(String[] args) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();

        try {
            Member member = new Member();
            member.setId(1L);
            member.setName("HelloA");
            
            em.persist(member);
            
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
        } finally {
            em.close();
        }

        emf.close();
    }
}

 

 

* 이 글은 인프런 김영한님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편'을 보고 작성한 글입니다.

https://www.inflearn.com/course/ORM-JPA-Basic

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 | 김영한 - 인프런

김영한 | JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 실무에서도

www.inflearn.com

728x90
반응형