김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다.
1. 컴포넌트
컴포넌트 | 역할 | 특징 | 주의사항 및 사용 방식 |
EntityManagerFactory | - Connection Pool 생성 및 관리 - EntityManager 인스턴스 생성 |
- 생성 비용 높음 (Singleton으로 관리) | - 앱 실행 시 한 번만 생성 - 전역으로 공유 |
EntityManager | - DB 통신 - 쿼리 실행 (JPQL 사용) |
- 커넥션 획득 (DataSource 사용) - 스레드 안전하지 않음 |
- 요청마다 생성 또는 주입
- 스레드 간 공유 금지 |
EntityTransaction | - 트랜잭션 처리 담당 | - EntityManager를 통해 획득 - 트랜잭션 범위 안에서만 DB 작업 가능 |
- begin()
→ 작업 → commit() or rollback() |
예제
더보기
public class JpaMain {
public static void main(String[] args) {
// 엔티티 매니저 팩토리 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
EntityManager em = emf.createEntityManager(); // 엔티티 매니저 생성
EntityTransaction tx = em.getTransaction(); // 트랜잭션 기능 획득
try {
tx.begin(); // 트랜잭션 시작
logic(em); // 비즈니스 로직
tx.commit(); // 트랜잭션 커밋
} catch (Exception e) {
e.printStackTrace();
tx.rollback(); //트랜잭션 롤백
} finally {
em.close(); // 엔티티 매니저 종료
}
emf.close(); // 엔티티 매니저 팩토리 종료
}
}
2. JPQL
- Java Persistence Query Language
- SQL을 추상화한 객체 지향 쿼리 언어
- JPA에서 데이터베이스 쿼리를 작성할 때 사용함
항목 | 내용 |
쿼리 대상 |
Entity 객체를 대상으로 쿼리 수행
- 클래스와 필드 기준으로 작성 (테이블 ❌) |
쿼리 실행 방식 |
SQL로 변환되어 실행됨 (JPQL은 SQL을 직접 다루지 않음)
|
장점 |
- DB 독립적 코드 작성 가능
- 객체 지향적 개발과 자연스럽게 통합 |
예제
더보기
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String dept;
// Getters and setters
}
String jpql = "SELECT e FROM Employee e WHERE e.department = :dept";
TypedQuery<Employee> query = entityManager.createQuery(jpql, Employee.class);
query.setParameter("dept", "HR");
List<Employee> results = query.getResultList();
'Spring > Spring Data JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 4. 엔티티 매핑 (1) | 2023.11.28 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 3. 영속성 관리 (0) | 2023.11.28 |
[자바 ORM 표준 JPA 프로그래밍] 1. JPA 소개 (0) | 2023.11.28 |
[Spring Data JPA] 2-2. Transactionality (0) | 2023.10.18 |
[Spring Data JPA] 2-1. Configuration (0) | 2023.10.18 |