JAVA

[JPA] JPA 기본 시작

로춘남 2021. 12. 21. 17:33
728x90

persistence.xml 통해 필요한 설정 정보를 관리

package jpabook.start;

import javax.persistence.*;
import java.util.List;

/**
 * @author holyeye
 */
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(); //엔티티 매니저 팩토리 종료
    }

    public static void logic(EntityManager em) {

        String id = "id1";
        Member member = new Member();
        member.setId(id);
        member.setUsername("지한");
        member.setAge(2);

        //등록
        em.persist(member);

        //수정
        member.setAge(20);

        //한 건 조회
        Member findMember = em.find(Member.class, id);
        System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());

        //목록 조회
        List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList();
        System.out.println("members.size=" + members.size());

        //삭제
        em.remove(member);

    }
}

코드는 크게 3가지로 나뉘어져 있음.

- 엔티티 매니저 설정

- 트랜잭션 관리

- 비즈니스 로직

 

1) 엔티티 매니저 설정

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

JPA를 시작하려면 우선 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야함. 이때 Persistence 클래스를 사용하여 이 클래스가 엔티티 매니저 팩토리 생성을 해서 JPA를 사용 할 수 있게 준비.

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

이렇게 적용하면 META-INF/persistence.xml에서 이름이 jpabook인 영속성 유닛(persistence-unit)을 찾아서 엔티티 매니저 팩토리를 생성한다. 이때, persistence.xml의 설정 정보를 읽어서 JPA를 동작시키기 위한 기반 객체를 만들고 JPA 구현체에 따라서는 데이터베이스 커넥션 풀도 생성하므로 엔티티 매니저 팩토리를 생성하는 비용은 크기 때문에 엔티티 매니저 팩토리를 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야함.

 

• 엔티티 매니저 생성

EntityManager em = emf.createEntityManager();

엔티티 매니저 팩토리에서 엔티티 매니저를 생선한다. JPA의 기능 대부분은 엔티티 매니저가 제공한다. 대표적으로 엔티티 매니저를 사용하여 엔티티를 DB에 등록/수정/삭제/조회 할 수 있음. 엔티티 매니저는 내부에 데이터소스(데이터베이스 커넥션)유지하면서 데이터베이스와 통신하기 때문에, 개발자 입장에서는 엔티티 매니저를 가상의 데이터베이스로 생각 할 수도 있다. 다만 엔티티 매니저는 DB 커넥션과 밀접한 관계이기 때문에 스레드간에 공유하거나 재사용하면 안된다.

 

• 종료

마지막으로 사용이 끝난 엔티티 매니저는 반드시 종료해야한다. 애플리케이션을 종료할때도 아래처럼 종료해야함.

em.close();
emf.close();

 

2) 트랜잭션관리

JPA를 사용하면 항상 트랜잭션 안에서 데이터를 변경해야한다. 트랜잭션이 없을 경우엔 예외가 발생됨.

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

        try {


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

        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback(); //트랜잭션 롤백
        }

트랜잭션 API를 사용해서 비즈니스 로직이 정상 동작하면 트랜잭션을 커밋 commit하고 예외가 발생하면 트랜잭션을 롤백 rollback한다.

 

3) 비즈니스 로직

public static void logic(EntityManager em) {

        String id = "id1";
        Member member = new Member();
        member.setId(id);
        member.setUsername("지한");
        member.setAge(2);

        //등록
        em.persist(member);

        //수정
        member.setAge(20);

        //한 건 조회
        Member findMember = em.find(Member.class, id);
        System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());

        //목록 조회
        List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList();
        System.out.println("members.size=" + members.size());

        //삭제
        em.remove(member);
    }

비즈니스 로직의 경우엔 기존에 알던것처럼 크게 어렵지 않게 구성되어 있다. 생소한 부분이 조금은 없다랄까? 아주 간략하게 애플리케이션을 따라해보았다. 익숙하지 않아서 어색한것이기때문에 얼른 내것으로 만들어야겠다. Step by Step


출 처 : 자바 ORM JPA프로그래밍(김영한)

728x90