김영한님의 인프런 강의와 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를 사용하므로, h2의 방언처리를 할 수 있도록 위와 같이 합니다.
CRUD를 해보기 전에 JPA의 구동방식은 아래와 같습니다.
먼저 Persistence로 EntityManagerFactory를 생성하고, EntityManagerFactory로 EntityManager를 셍성해야합니다.
주의할 점:
1. EntityManagerFactory은 딱 하나만 만들어서 애플리케이션 전체에서 공유하도록 합니다.
2. EntityManager는 쓰레드 간에 공유하지 않는다. 사용한 뒤 버립니다.
3. JPA의 모든 데이터 변경은 트랜잭션 안에서 실행합니다.
이제 CRUD를 해보겠습니다.
먼저 Member테이블을 만들고,
Member엔티티를 만듭니다.
@Entity 는 해당 클래스가 JPA가 관리해야할 객체임을 알려줍니다.(테이블과 매치된다 생각하면 됩니다.)
이제 메인메서드를 만든 클래스에 EntityManagerFactory와 EntityManager를 만듭니다.
1. 저장하기
2.조회하기
3.삭제하기
4. 조회 후 수정
5. 전체 검색
6. 페이징 시에
쿼리문 들이
EntityTransaction tx = em.getTransaction();
tx.begin();
(쿼리)
(쿼리)
(쿼리)
tx.commit();
트랜잭션(tx)으로 감싸져 있는데, 이는 트랜잭션 단위로 묶기 위한 것입니다.
혹시 오류가 날 수 있으니 try-catch문을 사용하여 Exception이 발생하면 rollback하도록 합니다.
'JPA > JPA원리' 카테고리의 다른 글
6 JPA 객체와 테이블 매핑, 데이터베이스 스키마 자동 생성 (0) | 2021.07.04 |
---|---|
5 JPA 준영속 상태 (0) | 2021.07.03 |
4 JPA 플러시(flush) (0) | 2021.07.03 |
3 JPA 영속성 컨텍스트 이해하기 (0) | 2021.07.03 |
1 왜 JPA를 사용해야 하는가? (0) | 2021.07.02 |