스프링

[자바 orm 표준 jpa 프로그래밍] 코드 정리 - 1

MC류짱 2023. 4. 12. 17:11
더보기

이 시리즈는 김영한님의 자바 orm 표준 jpa 프로그래밍 강의를 정리합니다.

 

데이터 넣기

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();

        // table에 insert하기
        try {
            Member member = new Member();

            member.setId(2L);
            member.setName("helloB");

            em.persist(member);

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

 

수정

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();

        // 수정
         try {
            Member findMember = em.find(Member.class, 1L);
            findMember.setName("helloJPA");

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

 

JPQL

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();

        // jpql
        try {
            List<Member> resultList = em.createQuery("select m from Member as m", Member.class)
                    .setFirstResult(1)
                    .setMaxResults(5)
                    .getResultList();

            for (Member member : resultList) {
                System.out.println("member = " + member.getName());
            }

            tx.commit();
        } catch (Exception e) {
            tx.rollback();
        } finally {
            em.close();
        }
}
  • JPQL을 통해 여러 데이터의 조회, LIMIT을 주는 등 조작할 수 있다.
  • select m from Member as m -> 등을 통해 객체로 조회한다.

 

영속성 컨텍스트

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();

        //영속성 컨테이너
        try {
            //비영속
            Member member = new Member();
            member.setId(1L);
            member.setName("HelloJPA");

            //엔티티를 영속
            em.persist(member);

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

 

1차 캐시에서 조회

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();

        try {
            Member member = new Member();
            member.setId(10L);
            member.setName("HelloJPA");

            
            em.persist(member); 
            // DB를 조회하지 않고 영속성 컨텍스트에 있는 데이터를 조회
            // 1차 캐시
            Member findMember = em.find(Member.class, 10L);
            System.out.println("findMember = " + findMember.getName());
            
            // 이 때 한번 쿼리를 날려서 영속성 컨텍스트에 저장
        	Member findMember1 = em.find(Member.class, 10L);
        	// 이 때는 쿼리를 날리지 않고 영속성 컨텍스트에서 가져옴
        	Member findMember2 = em.find(Member.class, 10L);
            // findMember1 == findMember2 -> true

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