JPA Application 개발

2024. 9. 21. 17:16·Spring
728x90

 

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() 메소드를 호출해서 처리한다.

728x90

'Spring' 카테고리의 다른 글

엔티티 매핑  (0) 2024.09.29
영속성 관리  (1) 2024.09.22
데이터베이스 방언(dialect)  (1) 2024.09.21
JPA란 무엇인가?  (0) 2024.09.21
JPA를 왜 쓰는가?  (1) 2024.09.21
'Spring' 카테고리의 다른 글
  • 엔티티 매핑
  • 영속성 관리
  • 데이터베이스 방언(dialect)
  • JPA란 무엇인가?
Bello's
Bello's
개발하는 벨로
  • Bello's
    벨로의 개발일지
    Bello's
  • 전체
    오늘
    어제
    • 분류 전체보기 (199) N
      • 노예 일지 (7)
        • 스타트업 노예일지 (3)
      • CS 이론 (81)
        • 학과 수업 (4)
        • 알고리즘 (64)
        • 시스템 프로그래밍 (3)
        • 데이터 통신 (1)
        • 운영체제 (2)
        • 데이터베이스 (1)
      • project (3)
      • 나는 감자다. (4)
      • Spring (27)
      • 모각코 (45)
        • 절개와지조(모각코) (7)
        • 어쩌다보니 박준태가 조장이조 (11)
        • 어쩌다보니 박준태가 또 조장이조 (12)
      • LikeLion🦁 (20)
      • 캘리포니아 감자 (4)
      • OpenSource Contribute (1)
      • 우아한테크벨로 (1) N
        • 프리코스 회고록 (6) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JPA
    자바
    오블완
    어렵다
    Spring
    타임리프
    프리코스
    BFS
    그래프 순회
    회고록
    뛰슈
    DFS
    나는 감자
    티스토리챌린지
    8기
    모각코
    누적합
    감자
    백준
    절개와지조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Bello's
JPA Application 개발
상단으로

티스토리툴바