JPA

JPA시작(3)_애플리케이션개발_기초편

개발자 배찌 2021. 6. 7. 13:04
728x90

객체 매핑완료!! persistence.xml 로 JPA 설정도 완료 했다면 !!

 

이제 JPA 애플리케이션을 개발해보자..

 

코드는 크게 3부분으로 나뉘어있다

  • 엔티티 매니저 설정
  • 트랜잭션 관리
  • 비즈니스 로직 

JpaMain.java

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);

    }
}

 

출력결과>>

findMember=지한, age=20
members.size=1

 


 

  • 엔티티 매니저 설정

1) 엔티티 매니저 팩토리 생성

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

    엔티티 매니저 팩토리를 생성해서 JPA를 사용할 수 있게 준비.

 

2)엔티티 매니저 생성

    EntityManager em = emf.createEntityManager();

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

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

 

3) 종료

    사용이 끝난 엔티티 매니저와 팩토리는 반드시 종료해주어야함.

    em.close(); //엔티티 매니저 종료

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

 

 

  • 트랜잭션 관리

1) JPA를 사용하면 항상 트랜잭션 안에서 데이터를 변경해야함.

 

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

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

        } catch (Exception e) {
            tx.rollback(); // 예외발생시 트랜잭션 롤백
        }

 

 

  • 비즈니스 로직

회원엔티티를 하나 생성 한 다음 엔티티 매니저를 통해 데이터베이스에 등록,수정,삭제,조회 한다

 

1) 등록

em.persist(member);

 

2) 수정

member.setAge(20);

 

3) 삭제

em.remove(member);

 

4) 한 건 조회

Member findMember = em.find(Member.class, id);

 

5) 하나 이상 조회 (JPQL)

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