Spring/인프런_JPA

[Spring]자바 ORM 표준 JPA 프로그래밍 - JPA 시작하기

빙응이 2024. 2. 13. 16:30

📝앤티티 매니저 팩토리를 이용한 JPA 사용해보기

사용 주의사항

  • 엔티티 매니저 팩토리는 하나만을 생성해서 애플리케이션 전체에서 공유해야한다.
  • 엔티티 매니저는 쓰레드간에 공유를 하지 않는다. 사용하고 버려야 한다.
  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다.

 

테이블(엔티티) 정의하기
@Entity
@Getter
@Setter
public class Member {
  //JPA에서 기본키는 따로 지정해줘야 한다.
  @Id
  private Long id;
  private String name;

}
CRUD 실습해보기 
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        //앤티티 매니저 
        EntityManager em = emf.createEntityManager();
        
        //code
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        //저장
        try {
            Member member = new Member();
            member.setId(1L);
            member.setName("helloA");
            em.persist(member);
            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            em.close();
        }
        //조회
        try {
            Member findMember = em.find(Member.class, 1L);
            System.out.println("findMember.id = "+ findMember.getId());
            System.out.println("findMember.name =" + findMember.getName());

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            em.close();
        }
        //삭제
        try {
            Member findMember = em.find(Member.class, 1L);
            em.remove(findMember);
            
            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            em.close();
        }
        //수정
        try {
            Member findMember = em.find(Member.class, 1L);
            findMember.setName("HelloJpa");
            
            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            em.close();
        }

하나하나씩 중요 문법을 살펴보자

엔티티매니저 관련

  • EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
    • 엔티티 매니저 팩토리를 정의 사용 이유는 엔티티매니저는 한 작업을 수행하고 버리기 때문이다.
  •  EntityManager em = emf.createEntityManager();
    • 엔티티 매니저 정의

CRUD 관련

  • em.persost(member) : 데이터베이스에 저장
  • em.find(member.class, 1L) : 기본키가 1L인 것을 찾는다.
  • em.remove(member) : 해당 데이터 삭제
  • em.setName() : 이것은 객체처럼 다루는 JPA 특성상 따로 저장하지 않고 바꾸기만 해도 적용된다.

트랜잭션 관련

  • EntityTransaction tx = em.getTransaction()
    • JPA는 모두 트랜잭션 안에서 적용되므로 트랜잭션을 정의한다.
  • tx.begin() : 트랜잭션을 시작하는 부분
  • tx.commit() : 데이터베이스에 결과를 반영한다.
  • tx.rollback() : 작업 전 상태로 롤백 

 

📝JPQL

JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.

SQL과 문법이 유사하며, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원한다.

가장 큰 차이점은 JPQL은 엔티티 객체를 대상으로 쿼리를 짠다는 것 

특징은 다음과 같다.

  • 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리
  • SQL을 추상화해서 특정 데이터베이스 SQL에 의존 X
  • JPQL을 한마디로 정의하면 객체 지향 SQL
댓글수0