[JPA] 2. JPA 시작하기

지니🧸·2023년 2월 7일
0

Spring Boot & JPA

목록 보기
9/35

본 문서는 인프런의 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의를 공부하며 작성한 개인 노트입니다.

🥋 프로젝트 생성

h2 설치 및 사용법

🛼 애플리케이션 개발

JPA 작동 방식

  1. JPA에는 Persistence라는 클래스 존재
  2. Persistence에서 설정 정보(META-INF/persistence.xml) 조회
  3. 조회 후 EntityManagerFactory 클래스 생성
  4. EntityManagerFactory 클래스가 필요에 따라 EntityManager 생성

등록

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

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

    try {
        //트랜잭션

        em.persist(엔티티 오브젝트);
        tx.commit();
    } catch (Exception e) {
        tx.rollback();
    } finally {
        em.close();
    }

    em.persist(member);
    tx.commit();
    em.close();
    emf.close();
}
  • 관례상 entity 클래스명을 이름으로 갖는 테이블을 찾아 정보 입력
    • 바꾸려면 entity 클래스에 @table(name="") 에노테이션
    • 테이블의 칼럼명이 entity 클래스 필드명과 다르면 필드에 @column(name="") 에노테이션

수정

  • 등록된 순간부터 오브젝트는 JPA가 관리하기 때문에 JPA를 통해 가져온 오브젝트는 em.persist() 없이도 디비에 정보 업데이트 가능

주의사항

  • entity manager factory는 애플리케이션 전체에 딱 하나만 생성해서 공유
  • entity manager는 threat간 공유하지 않는다
    • 사용 후 버림
  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행

JPQL

  • JPA가 엔티티 객체 중심 개발이라 검색 sql 처리가 까다로움
  • JPQL: JPA가 제공하는 SQL을 추상화한 객체 지향 쿼리 언어
    • SQL 문법 유사
    • SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 가능
    • 엔티티 객체를 대상으로 쿼리 (디비 테이블 대상으로 쿼리하는 SQL와 차이)
      (예) em.createQuery("select m from Member", Member.class).getResultList();
      (예2)
List<Member> result = m.createQuery("select m from Member", Member.class)
						.setFirstResult(5)
                        .setMaxResults(8)
                        .getResultList();
profile
우당탕탕

0개의 댓글