sample jpa 프로젝트 생성

Mina Park·2022년 8월 26일
0
  1. jpa 구동방식

  • EntityManagerFactory가 생성되고, 각각 EntityManager가 생성

    EntityManagerFactory: 하나만 생성해서 애플리케이션 전체 공유
    EntityManager: 필요시 생성/종료 => 쓰레드간 절대 공유 X

  • JPA의 모든 데이터 변경은 반드시 트랜잭션 안에서 실행!!! (insert,update,delete)
public class jpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        //persistence.xml에서 설정한 persistence-unit name

        EntityManager em = emf.createEntityManager(); //행동 단위마다 entity manager 생성

        //jpa의 모든 데이터 변경은 반드시 트랜잭션 단위 내에서 실행!!!
        EntityTransaction tx = em.getTransaction();
        tx.begin(); //트랜잭션 시작

        try {
            //회원 등록
//            Member member = new Member();
//            member.setId(2L);
//            member.setName("HelloB");
//            em.persist(member);
//            tx.commit();

            //회원 수정
//            Member findMember = em.find(Member.class, 1L );
//            findMember.setName("HelloJPA");
//            tx.commit();

            //회원 삭제
//            Member findMember2 = em.find(Member.class, 1L);
//            em.remove(findMember2);
//            tx.commit();

            //회원 전체 조회
            //필요시 객체를 대상으로 하면서도 검색 등이 가능한 JPQL 사용(dialect 설정을 통해 데이터베이스에 상관없이 이용 가능) => 객체 지향 SQL
//            List<Member> result = em.createQuery("select m from Member as m", Member.class).setFirstResult(5).setMaxResults(8).getResultList();
//            for (Member member : result) {
//                System.out.println("member = " + member.getName());
//            }
//            tx.commit();

        } catch (Exception e) {
            tx.rollback();
        } finally {
            em.close(); //자원 사용 종료 후에는 entity manager 클로즈
        }

        emf.close();
    }
}
  1. JPQL
  • 실무에서는 다양한 검색조건 등을 반영한 조회 쿼리 필요 => 복잡한 검색 쿼리는 어떻게?
  • JPA를 사용하는 엔티티 객체 중심 개발 기조를 유지하면서도 검색 조건이 포함된 SQL 필요
  • JPA는 SQL을 추상화한 JPQL이라는 객체지향 쿼리 언어 제공!!
    - dialect 설정을 통해 특정 데이터베이스 SQL에 의존하지 않고 사용 가능

    JPQL: 엔티티 객체를 대상으로 쿼리 => 객체지향 SQL
    SQL: 데이터베이스 테이블을 대상으로 쿼리

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

0개의 댓글