public class JpaMain {
public void main(String[] args) {
// 엔티티 매니저 팩토리 생성
EntityManagerFactory emf = Persistence.createEntityFactory("jpabook");
// 엔티티 매니저 생성
EntityManager em = emf.createEntityManager();
// 트랜잭션 획득
EntityTransaction tx = em.getTransaction();
try {
tx.begin(); // 트랜잭션 시작
logic(em); // 비즈니스 로직 실행
tx.commit(); // 트랜잭션 커밋
} catch (Exception e) {
tx.rollback(); // 트랜잭션 롤백
} finally {
em.close(); // 엔티티 매니저 종료
}
emf.close(); // 엔티티 매니저 팩토리 종료
}
// 비즈니스 로직
private static void logic(EntityManager em) {...}
}
코드 구분
1. 엔티티 매니저 설정
1) 엔티티 매니저 팩토리 생성
- Persistence 클래스를 사용해서 엔티티 매니저 팩토리를 생성해서 JPA를 사용할 수 있게 준비한다.
- 이름이 jpabook인 영속성 유닛을 찾아서 엔티티 매니저 팩토리를 생성한다.
- JPA 구현체에 따라서는 커넥션 풀도 생성한다.
- 엔티티 매니저 팩토리를 생성하는 비용은 아주 크기 때문에, 애플리케이션 전체에서 딱 한 번만 생성하고 공유한다.
2) 엔티티 매니저 생성
- JPA의 기능 대부분을 엔티티 매니저가 제공한다.
- DB CRUD를 엔티티 매니저를 사용해서 한다.
따라서 애플리케이션 개발자는 엔티티 매니저를 가상의 DB로 생각할 수 있다.
- 엔티티 매니저는 DB 커넥션과 밀접한 관계가 있으므로 쓰레드 간에 공유하거나 재사용하면 안된다.
3) 종료
- 사용이 끝난 엔티티 매니저는 반드시 종료해야 한다.
- 애플리케이션을 종료할 때 엔티티 매니저 팩토리도 종료해야 한다.
2. 트랜잭션 관리
- JPA를 사용하려면 항상 트랜잭션 안에서 데이터를 변경 해야한다.
- 비즈니스 로직이 정상 동작하면 커밋을하고, 예외가 발생하면 롤백을 한다.
3. 비즈니스 로직
- 엔티티를 저장하려면 엔티티 매니저의 persist() 메소드에 저장할 엔티티를 넘겨준다.
- 수정할 때는 엔티티를 수정하면 따로 update같은 호출 없이 JPA가 알아서 변경사항을 추적해서 SQL을 DB에 전달한다.
- 삭제의 경우는 remove()를 사용한다.
- 조회는 find()
4, JPQL
JPA는 SQL을 추상화한 JPQL(java persistence query language)이라는 객체지향 쿼리 언어를 제공한다.
JPQL과 SQL의 차이점
JPQL은 엔티티 객체를 대상으로 쿼리한다. 클래스와 필드를 대상으로한다.
SQL은 DB 테이블을 대상으로 쿼리한다.
JPQL은 테이블을 전혀 알지 못한다.
createQuery(JPQL, 반환타입) 메소드를 실행해서 쿼리 객체를 생성한 후 쿼리 객체의 getResultList() 메소드를 호출해서 처리한다.
'Spring' 카테고리의 다른 글
엔티티 매핑 (0) | 2024.09.29 |
---|---|
영속성 관리 (1) | 2024.09.22 |
데이터베이스 방언(dialect) (0) | 2024.09.21 |
JPA란 무엇인가? (0) | 2024.09.21 |
JPA를 왜 쓰는가? (0) | 2024.09.21 |