[JPA기본] 2. JPA 시작

kiwonkim·2021년 11월 25일
0

[ 이전 포스팅 ]

JPA는 자바 어플리케이션과 JDBC 사이에서 쿼리문을 생성해준다. 그래서 SQL 문을 작성하지 않고 객체<->테이블의 매핑을 가능케하여 생산성을 향상시키고 유지보수를 용이하게 해준다.

이번 포스팅에선 직접 JPA를 사용해보자.

[ JPA 구동 방식 ]

persistence.xml

메이븐에서 JPA 의 설정파일이다. resources/META-INF 에 생성해야한다. JPA 관련 여러 설정정보가 담긴다.

EntityManagerFactory

EntityManagerFactory란 JPA 를 사용하기 위한 EntityManager 를 생성하는 공장이다. 어플리케이션 전체에서 하나만 생성해서 사용한다. 파라미터로는 persitence-unit 의 name 속성을 사용한다.

EntityManager

EntityManager 란 JPA 의 메서드들을 갖는 객체이다. 웹에서 하나의 요청스레드마다 각기 다른 EntityManager 를 갖는다. 스레드간에 공유하면 절대 안되며, 스레드는 사용 후 close로 닫아야한다.

EntityTransaction

데이터베이스에서 모든 접근은 하나의 트랜잭션안에서 수행되며 JPA도 이를 어길 수 없다. 반드시 트랜잭션을 생성하고, begin 후에 DB 변경을 수행하며. 변경 완료시 rollback 이나 commit 을 호출해야한다.


[ JPA 이용 CRUD ]

객체생성

@Entity : 테이블과 매핑할 객체임을 알린다. 필드명을 컬럼값으로 테이블이 생성된다.

@Id : PK 인 컬럼을 알려주는 어노테이션이다.

Select

테이블에서 값을 읽어와 객체에 저장한다.
em.find(타입, PK값) 을 수행하면 DB에서 객체를 찾아 반환받는다.

Insert

테이블에 객체를 삽입한다.
em.persist(객체명) 을 수행하면 DB 에 객체가 삽입된다.

Update

테이블을 수정한다.
em.find 로 객체를 조회한 뒤 이를 수정하면된다. JPA 가 commit 전에 조회한 객체의 수정을 확인하고 수정사항을 DB에 반영한다.

Delete

테이블에서 투플을 삭제한다.
em.remove(객체명) 을 수행하면 테이블에서 해당 객체와 같은 투플이 삭제된다.

JPQL

단순히 객체 -> 테이블 투플. 테이블 투플 -> 객체 가 아닌 복잡한 쿼리가 필요한 경우에 사용한다. 이 때 JPA 는 SQL 을 추상화한 JPQL 이라는 객체 지향 쿼리 언어를 em.createQuery 의 파라미터로 사용한다.


[ 결론 ]

JPA 설정파일인 persistence 로 EntityManagerFactory 를 만든다.
emf 는 어플리케이션 마다 하나씩만 존재하며 각 스레드마다 EnityManager를 받아 사용한다.
em 은 스레드간에 공유되선 안되며 사용 후 close 로 닫아야한다.
JPA 의 DB 접근은 em 을 통해 이루어지며 모두 트랜잭션 안에서 수행되어야한다.
기본 CRUD 메서드는 em.persist, em.find, em.remove 등이 존재한다. 수정은 find 객체 변경시 자동반영된다.
복잡한 쿼리는 JPQL 로 작성한다.

0개의 댓글