전에 포스팅했던 실습 구성하기 1에 이은 2번째 포스팅입니다.
2번재 포스팅에서는 JPA가 어떻게 실행되었는지 1탄에 적었던 포스팅에 이어서 보겠습니다.
public class JpaApplication {
public static void main(String[] args) {
①
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("jpa-sample");
②
EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성
③
EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득
try {
tx.begin(); ④
Member member = new Member("최윤진");
em.persist(member); ⑤
tx.commit(); ⑥
} catch (Exception e) {
tx.rollback(); ⑦
} finally {
em.close(); ⑧
}
emf.close(); ⑨
}
}
위의 코드는 첫번째 포스팅에 작성된 내용입니다. 한번 한줄한줄 알아보겠습니다.
① Persistence 클래스를 통해 persistence.xml안에있는 persistence-unit name이 jpa-sample
인 설정을찾아 엔티티 매니저 팩토리를 생성해준다.
② JPA의 대부분의 기능은 EntityManager가 제공한다. EntityManager를 사용하기 윟서는 EntityManagerFactory를 통해 생성할 수 있다. EntityManager를 이용하면 CRUD의 기능들을 사용할 수있으며 Database Connection과 밀접한 관계이기 때문에 스레드간에 공유하거나 재사용 하면 안된다.
③ JPA를 사용하기 위해서는 항상 트랜잭션 내부에서 데이터를 변경해야 한다. 그러기 위해 EntityManager로 부터 Transaction을 기능을 받습니다.
④ 트랜잭션의 시작을 의미합니다.
⑤ Member Entity를 EntityManager의 persist를 통해 DB에 저장하도록 합니다.
⑥ 마무리 되었다면 트랜잭션 커밋을 의미합니다.
⑦ 만약 트랜잭션 내부에서 작업을하다가 Exception이 발생한다면 rollback()
⑧ try-finally를 통해 다 사용한 EntityManager close()
⑨ Application이 종료될때 EntityManagerFactory도 동일하게 close()
자 그럼 insert는 했는데 select, update, delete는 어떻게 해야하는지 알아보겠습니다. ( 추후에 더 자세히 다룰 예정입니다. )
이미 작성한 코드에 따로 추가하는식으로 작성하겠습니다.
SELECT
em.find(Class
class, Object o) 로 구성되어있다, 따라서 단건 데이터를 조회한다면 em.find(Member.class, id); 를 통해 조회할 수 있다. 이때 의미하는 id는 @Id를 의미하며 각 테이블의 기본 키와 매핑한 식별자를 의미한다. 조회한 결과값은 해당 Entity를 반환합니다.
UPDATE
데이터의 수정은 em.update()같은 메서드가 있을거라고 충분히 생각할수 있습니다. 하지만 JPA는 Entity가 변경되었는지 추적하는 기능을 가지고 있기 떄문에 setName() 처럼 Entity의 값만 변경하면 UpdateSQL을 생성해 데이터베이스에 값을 변경한다.
DELETE
Entity를 삭제하는것은 너무 간단합니다.
em.remove(entity)이렇게 해주시면 DeleteSQL을 생성해서 삭제하는것을 알 수 있습니다.
'JPA' 카테고리의 다른 글
[JPA] 플러시 ( flush ) (0) | 2020.12.22 |
---|---|
[JPA] 영속성 컨텍스트의 특징 및 기본 구조 (0) | 2020.12.20 |
[JPA] JPA 영속성 및 상태 (0) | 2020.12.20 |
[JPA] JPA 실습 구성하기 - 1 (0) | 2020.12.16 |
[JPA] JPA란?? (0) | 2020.12.16 |
댓글