1. 애플리게이션 개발
객체 매핑을 완료하고 persistence.xml로 JPA설정을 완료했다. 이제 JPA 애플리케이션을 개발하자.
package jpabook.start;
import javax.persistence.*;
import java.util.List;
/**
* @author holyeye
*/
public class JpaMain {
public static void main(String[] args) {
//엔티티 매니저 팩토리 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성
EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득
try {
tx.begin(); //트랜잭션 시작
logic(em); //비즈니스 로직
tx.commit();//트랜잭션 커밋
} catch (Exception e) {
e.printStackTrace();
tx.rollback(); //트랜잭션 롤백
} finally {
em.close(); //엔티티 매니저 종료
}
emf.close(); //엔티티 매니저 팩토리 종료
}
public static void logic(EntityManager em) {
String id = "id1";
Member member = new Member();
member.setId(id);
member.setUsername("지한");
member.setAge(2);
//등록
em.persist(member);
//수정
member.setAge(20);
//한 건 조회
Member findMember = em.find(Member.class, id);
System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());
//목록 조회
List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList();
System.out.println("members.size=" + members.size());
//삭제
em.remove(member);
}
}
코드는 크게 3부분으로 나뉘어 있다.
- 엔티티 매니저 설정
- 트랜잭션 관리
- 비즈니스 로직
2. 엔티티 매니저 설정
- 엔티티 매니저 팩토리 생성 - JPA를 시작하려면 우선 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다.EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); 에서 persistence.xml에서 이름이 jpabook인 연속성 유닛을 찾아서 엔티티 매니저 팩토리를 생성한다. 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한번만 생성하고 공유해서 사용해야 한다.
- 엔티티 매니저 생성 - EntityManager em = emf.createEntityManager(); 에서는 엔티티 매니저 팩토리에서 엔티티 매니저를 생성한다. 엔티티 매니저를 사용해서 엔티티를 데이터베이스에 등록/수정/삭제/조회할 수 있다. 참고로 엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용하면 안 된다.
- 종료 : 마지막으로 사용이 끝난 엔티티매니저는 반드시 졸료해야하며 애플리케이션을 종료할 때는 엔티티 매니저 팩토리도 종료해야 한다.
3. 비즈니스 로직
엔티티를 하나 생성한 다음 엔티티 매니저를 통해 데이터베이스에 등록, 수정, 삭제, 조회한다.
public static void logic(EntityManager em) {
String id = "id1";
Member member = new Member();
member.setId(id);
member.setUsername("지한");
member.setAge(2);
//등록
em.persist(member);
//수정
member.setAge(20);
//한 건 조회
Member findMember = em.find(Member.class, id);
System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());
//목록 조회
List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList();
System.out.println("members.size=" + members.size());
//삭제
em.remove(member);
}
4. JPQL
List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList();
JPA는 엔티티 객체를 중심으로 개발하므로 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 한다.
애플리케이션이 필요한 데이터만 데이터베이스에 불러오려면 결국 검색 조건이 포함된 SQL을 사용해야 한다. JPA는 JPQL( Java Persistence Query Language)이라는 쿼리 언어로 이런 문제를 해결한다.
JPQL과 SQL의 가장 큰 차이점은 다음과 같다.
- JPQL은 엔티티 객체를 대상으로 쿼리한다. 쉽게 이야기해서 클래스와 필드를 대상으로 쿼리한다.
- SQL은 데이터베이스 테이블을 대상으로 쿼리한다.
elect m from Member m이 바로 JPQL이다. Member은 테이블이 아니고 엔티티 객체이다.
'Backend > JPA' 카테고리의 다른 글
[JPA] 여러개의 insert문을 한번에 날릴 수 있을까? (0) | 2022.02.08 |
---|---|
[JPA] 4.엔티티 매핑 (0) | 2021.08.25 |
[JPA] 3. 영속성 관리 (0) | 2021.08.18 |
[JPA] 2-1. JPA 시작 (0) | 2021.08.03 |
[JPA] 1. JPA란 무엇인가? (1) | 2021.07.01 |