본문 바로가기

jpa

JPA EntityFactory 활용 CRUD

개요

  • Persistence.createEntityManagerFactory("example Name") 구문을 활용하여 엔티티 매니저 객체를 생성하고 이를 활요하여 조회, 추가, 삭제, 업데이트 동작을 수행한다.
  • meber Class에 맞게 H2 DB에 테이블을 생성한다.
create table Member (
       id bigint not null;
       name varchar(255);
       promary key (id)
);
  • JPQL을 활용하여 조회를 실행해본다.

EntityManagerFactory

  • 엔티티 매니지 팩토리는 DB당 1개가 생성된다.
  • 엔티티매니저는 쓰레드간에 절대 공유하면 안된다.
  • JPA 모든 데이터 변경은 트랜잭션 안에서 실행해야한다.
    • RDB는 트랜잭션 안에서 실행하도록 설꼐 되어있다.
    • 표기나 작성 안할 경우 자동으로 트랜잭션이 실행된다. (서버 환경 설정 autoCommit)

 

JpaMain.class

package hellojpa;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.awt.*;
import java.util.List;

public class JpaMain {

    public static void main(String[] args) {
       
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        // db 작업시에는 EntityManager 객체를 반드시 생성하고 닫아준다.
        EntityManager em = emf.createEntityManager();
        // code

        // tran 객체
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        try {
            /*
            추가
             */
//            Member member = new Member();
//            member.setId(2L);
//            member.setName("hihi2");
//            em.persist(member);
            /*
            조회
             */
//            Member findMember = em.find(Member.class, 1L);
//            System.out.println(findMember.getId());
            /*
            업데이트
            : 엔티티가 관리하는 객체에 수정점이 생기면
            트렌젝션이 자동으로 수정된 내역을 update를 실행한다.
             */
//            Member findMember = em.find(Member.class, 1L);
//            findMember.setName("Lee");

            /*
            JPQL
            DB별 방언에 적용할 수 있도록 persistence에 DB 설정하면
            원하는 결과값을 가져올 수 있다. (DB가 변경되도 동일하게 적용한다. 코드수정 없음)
                검색쿼리를 객체를 대상으로 쿼리를 실행 할 수 있도록 도와준다.
                객체 지향 SQL이다.
              */

            List<Member> result =  em.createQuery("select m from Member as m", Member.class)
                    .setFirstResult(1)
                    .getResultList();

            for(Member m : result){
                System.out.println(m.getId() + m.getName());
            }

            tx.commit();
        } catch (Exception e) {
            tx.rollback();
        } finally {
            em.close();
            emf.close();
        }

    }

}

Member.class

package hellojpa;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Member {

    @Id
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

'jpa' 카테고리의 다른 글

JPA 영속성  (0) 2021.03.14
JPA 프로젝트 개요 및 생성  (0) 2021.02.28
JPA 개요  (0) 2021.02.22