본문 바로가기
JPA/JPA원리

2 JPA로 CRUD해보기

by 킹차니 2021. 7. 2.
김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C

 

데이터베이스 방언 

• JPA는 특정 데이터베이스에 종속X

•  각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다름

예1 ) 가변 문자: MySQL은 VARCHAR, Oracle은 VARCHAR2

예2 ) 문자열을 자르는 함수: SQL 표준은 SUBSTRING(), Oracle은 SUBSTR()

예3 ) 페이징: MySQL은 LIMIT, Oracle은 ROWNUM

• 방언: SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능

 

 

JPA는 DB방언들을 잘 처리해줍니다.

h2방언처리(persistence.xml)

현재 h2를 사용하므로, h2의 방언처리를 할 수 있도록 위와 같이 합니다.

 

 

 

CRUD를 해보기 전에 JPA의 구동방식은 아래와 같습니다.

먼저 PersistenceEntityManagerFactory를 생성하고, EntityManagerFactoryEntityManager를 셍성해야합니다.

 

주의할 점:

1. EntityManagerFactory은 딱 하나만 만들어서 애플리케이션 전체에서 공유하도록 합니다.

2. EntityManager쓰레드 간에 공유하지 않는다. 사용한 뒤 버립니다.

3. JPA의 모든 데이터 변경은 트랜잭션 안에서 실행합니다.

 

 

 

 

이제 CRUD를 해보겠습니다.

먼저 Member테이블을 만들고, 

 

Member엔티티를 만듭니다.

@Entity 는 해당 클래스가 JPA가 관리해야할 객체임을 알려줍니다.(테이블과 매치된다 생각하면 됩니다.)

 

이제 메인메서드를 만든 클래스에 EntityManagerFactoryEntityManager를 만듭니다.

 

 

1. 저장하기

 

2.조회하기

 

3.삭제하기

 

4. 조회 후 수정

 

5. 전체 검색

 

6. 페이징 시에

쿼리문 들이 

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

(쿼리)

(쿼리)

(쿼리)

tx.commit();

 

트랜잭션(tx)으로 감싸져 있는데, 이는 트랜잭션 단위로 묶기 위한 것입니다.

혹시 오류가 날 수 있으니 try-catch문을 사용하여 Exception이 발생하면 rollback하도록 합니다.