JPA의 CURD

김득회·2022년 5월 29일
0

JPA

목록 보기
3/11

JPA 애플리케이션을 개발하기 위해서는 크게 3부분으로 나누어 개발 할 수 있다.

  1. 엔티티 매니저 설정
  2. 트랜잭션 관리
  3. 비즈니스 로직

엔티티 매니저 설정

엔티티 생성 과정은 다음과 같다.

엔티티 매니저 팩토리 생성

JPA를 시작하려면 persistance.xml의 설정 정보를 사용하여 EntityManagerFactory를 생성해야한다.

EntityManagerFactory emf = Persistance.createEntityManagerFactory("hello");

뒤에 선언한 hello는 persistance.xml에서 설정한 persistance-unit(영속성 유닛)에 선언한 정보로 해당 유닛의 내부의 설정 정보를 읽어서 엔티티 팩토리 매니저를 생성하고 JPA를 동작시키기 위한 기반 객체를 만들고 구현체에 따라서는 데이터베이스 커넥션 풀도 생성한다.

때문에 생성 비용이 많이 크기 때문에 엔티티 팩토리 매니저는 애플리케이션 전체에서 딱 한번만 생성을 하고 공유해서 사용하는 싱클톤 방식을 적용하여 운영하는 것이 바람직하다.

엔티티 매니저 생성

엔티티 메니저 팩토리에서 엔티티 매니저를 생성하는데, JPA의 대부분 기능을 엔티티 메니저가 제공한다.

엔티티 매니저를 사용하여 CURD를 할 수 있다.

엔티티 매니저는 데이터베이스 커넥션을 유지하면서 데이터베이스와 통신한다.
때문에 애플리케이션 개발자는 엔티티 매니저를 가상의 데이터베이스로 생각할 수 있다.

여기서 중요한 점은 엔티티 매니저 팩토리와는 다르게 데이터베이스 커넥션과 밀접한 관계가 있기 때문에 스레드간에 공유를 하면 안 된다.

생성하는 방법은 다음과 같다.

EntityManager em = emf.createEntityManager();

종료

사용이 끝난 엔티티 매니저는 close() 메서드를 사용하여 반드시 종료해야 한다.

엔티티 매니저가 종료되면, 엔티티 매니저 팩토리도 종료해야한다.

em.close();
emf.close();

트랜잭션 관리

JPA를 사용할 경우 항상 트랜잭션 안에서 데이터를 변경 해야한다.
트랜잭션 없이 데이터를 변경하면 예외가 발생한다.

엔티티 매니저에서 트랜잭션 관련 API를 선언 해줘야한다.

EntityTransaction tx = em.getTransaction();
try{
	tx.begin(); //트랜잭션 시작
    logic(); //비즈니스 로직 실행
    tx.commit(); //트랜잭션 커밋
}catch(exception e){
	tx.rollback(); //예외 발생 시 롤백
}

트랜잭션을 사용하여 비즈니스 로직이 잘 동작하면 트랜잭션을 커밋하고 예외가 발생하면 트랜잭션을 롤백한다.

비즈니스 로직

비즈니스 로직은 관리할 엔티티를 선언 한 후 엔티티 매니저를 통해 데이터베이스에 등록, 수정, 조회, 삭제를 수행한다.

등록

JPA에서의 등록은 persisct를 사용한다.

String id = "id1";
Member member = new Member();
member.setId(id);
member.setUserName("득");
member.setAge(2);

//등록
em.persist(member);

엔티티를 저장하기 위해서 persist() 메서드를 사용하여 저장할 엔티티들 파라메터로 넘겨주면 된다.

수정

JPA에서의 특이점은 수정하는 메서드가 따로 존재하지 않는다.
다면 엔티티가 수정되면 JPA에서 어떤 엔티티가 수정되었는지 추적하는 기능을 갖추고 있어서 값만 변경하더라도 JPA에서 UPDATE를 수정하여 데이터베이스의 값을 변경한다.

member.setAge(24);

삭제

엔티티를 삭제하기 위해서는 remove() 라는 메서드를 사용하여 엔티티를 넘겨주면 된다. JPA에서는 DELETE SQL을 생성 후 실행한다.

em.remove(member);

조회

  • 한 건조회
    한 건 조회 하는 방법은 find를 사용하는 방법이 있다. 이것은 보통 @id로 DB테이블의 기본 키와 매핑한 식별자 값으로 엔티티 하나를 조회하는 메서드이다.
  • 다수 건 조회
    하나 이상의 회원 목록을 조회하기 위해서는 JPQL을 사용하면 된다.
    JPQL은 (Java Persistence Query Language)라는 기술을 사용하는데, 테이블이 아닌 객체 중심으로 검색을 하기 위해서 사용하는 방식이다.
    JPQL은 SQL과 문법이 유사하며 SELECT, FROM, WHERE, GROUP BY, HAVING JOIN등을 사용할 수 있다.

SQL과의 차이점은 엔티티 객체를 대상으로 쿼리하는 것인지, 데이터베이스 테이블을 대상으로 쿼리하는 것인지가 다르다.

사용법은 em.createQuery(JPQL, 반환타입); 메서드를 실행하고 getResultList() 메서드를 호출하면 된다.

List<Member> members = 
	em.createQuery("select m from Member m", Member.class).getResultList();
profile
감성 프로그래머 HoduDeuk

0개의 댓글