본문 바로가기

Spring

[Spring] JPA

JPA

🔗JPA(Java Persistence API/Jakarta Persistence API)

  • Java 진영에서 사용하는 ORM(Object-Relational Mapping) 기술의 표준 사양(또는 명세, Specification)
  • Java의 인터페이스로 사양이 정의되어 있기 때문에 JPA라는 표준 사양을 구현한 구현체는 따로 있다는 것을 의미
  • 구현체 : 🔗Hibernate ORM, EclipseLink, DataNucleus 등
    • Hibernate ORM은 JPA에서 정의해둔 인터페이스를 구현한 구현체
    • JPA에서 지원하는 기능 이외에 Hibernate 자체적으로 사용 API 역시 지원

데이터 액세스 계층 JPA 위치

 

  • JPA는 데이터 엑세스 계층의 상단에 위치
  • 데이터 저장, 조회 등의 작업은 JPA를 거쳐 Hibernate ORM을 통해 이뤄짐
  • Hibernate ORM은 내부적으로 JDBC API를 이용하여 데이터베이스에 접근

Persistence

JPA 의 P (Persistence)

  • Persistence : 영속성, 지속성
    • 무언가를 금방 사라지지 않고 오래 지속되게 한다

영속성 컨텍스트(Persistence Context)

 

  • ORM : 객체(Object)와 DB 테이블의 매핑을 통해 엔티티 클래스 객체 안에 포함된 정보를 테이블에 저장하는 기술
  • 영속성 컨텍스트 : 테이블과 매핑되는 엔티티 객체 정보
    • 엔티티 정보는 데이터베이스 테이블에 데이터를 저장, 수정, 조회, 삭제에 사용
  • 1차 캐시 : JPA에서 엔티티 정보를 저장하는 곳
  • 쓰기 지연 SQL 저장소 : DB에 보내지 않은 Query를 저장한 곳

JPA  API

build.gradle 의존 라이브러리 추가

dependencies {
      implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 
      ...
}

JPA 설정(application.yml)

 

ddl-auto : 엔티티 테이블 자동 생성

spring:
h2:
console:
  enabled: true
  path: /h2     
datasource:
url: jdbc:h2:mem:test
jpa:
hibernate:
  ddl-auto: create  # (1) 스키마 자동 생성
show-sql: true      # (2) SQL 쿼리 출력

샘플 코드 실행 위한 Config 예시

@Configuration
public class JpaBasicConfig {
    private EntityManager em;
    private EntityTransaction tx;
    
    @Bean
    public CommandLineRunner testJpaBasicRunner(EntityManagerFactory emFactory) {
        this.em = emFactory.createEntityManager();
        this.tx = em.getTransaction();
        
        return args -> {
            tx.begin();
            Member member = new Member("hgd@gmail.com");
            
            em.persist(member);
            
            tx.commit();
            
            Member resultMember = em.find(Member.class, 1L);
            
            System.out.println("Id: " + resultMember.getMemberId() +
                          ", email: " + resultMember.getMemberEmail());
    }
}

JPA API Methods

 

Method 설명
em EntityManager. EntityManagerFactory에서 createEntityManager 메서드 통해 가져온다
tx EntityTransaction. EntityManager에서 getTransaction 메서드 통새 가져온다
tx.begin() Transaction 실행 위한 메서드
em.persist() 영속성 컨텍스트에 엔티티 저장
tx.commit() 메서드 호출 시 영속성 컨텍스트에 저장되어있는 객체를 DB에 적용
em.flush() tx.commit() 메서드 호출 시 JPA 내부적으로 호출되어 영속성 컨텍스트 변경내용을 DB에 반영
em.find(.class, ) 영속성 컨텍스트에서 데이터 조회

'Spring' 카테고리의 다른 글

[Spring WebFlux] Reactive Programming  (0) 2023.01.09
[Spring] JPA Entity Mapping  (0) 2022.12.21
[Spring] JDBC  (0) 2022.12.21
[Spring] 예외 처리  (0) 2022.12.21
[Spring] Mapper / Mapstruct  (0) 2022.12.21
Recent Posts
Popular Posts
Recent Comments