JPA

JPA 애플리케이션 개발 (02장)

hoon.lucky7 2020. 8. 26. 23:32
public class JpaMain {

    public static void main(String[] args) {

        //엔티티 매니저 팩토리 생성
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
        EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성

        EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득

        try {


            tx.begin(); //트랜잭션 시작
            logic(em);  //비즈니스 로직
            tx.commit();//트랜잭션 커밋

        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback(); //트랜잭션 롤백
        } finally {
            em.close(); //엔티티 매니저 종료
        }

        emf.close(); //엔티티 매니저 팩토리 종료
    }
 }

 

*엔티티 매니저 팩토리 생성

 

EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");

 

JPA를 시작하려면 우선 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다.

이때 persistence.xml의 설정 정보를 읽어서 JPA를 동작시키기 위한 기반 객체를 만들고 JPA구현체에 따라서는 데이터베이스 커넥션 풀도 생성하므로 엔티티 매니저 팩토리를 생성하는 비용은 아주 크다.

따라서 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한번 생성하고 공유해서 사용해야 한다.

 

*엔티티 매니저 생성

 

EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성

 

엔티티 매니저를 사용해서 엔티티를 데이터베이스에 등록/수정/삭제/조회할 수 있다.

참고로 엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용하면 안 된다.

 

JPA는 SQL을 추상화한 JPQL이라는 객체지향 쿼리 언어를 제공한다.

 

* 차이점 

JPQL : 엔티티 객체를 대상으로 쿼리 한다. 쉽게 이야기 해서 클래스와 필드를 대상으로 쿼리한다. 

SQL : 데이터베이스 테이블을 대상으로 쿼리한다.

 

 

 

 

 

참고

자바 ORM 표준 JPA 프로그래밍 책