JPA
JPA의 구동 방식
- Persistence 클래스에서 META-INF/persistence.xml을 조회한다.
이때, META-INF/persistence.xml의 persistence-unit name과 EntityManagerFactory의 persistenceUnitName를 동일하게 매핑시켜야 한다. - EntityManagerFactory를 생성한다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
- EntityManagerFactory에서 필요할 때마다 EntityManager를 생성한다.
EntityManager em = emf.createEntityManager();
엔티티 생성
@Entity
@Getter @Setter
public class Member {
@Id
private Long id;
private String name;
}
- @Entity : JPA가 관리할 객체라고 명시하기 위해 엔티티 클래스에 적용한다.
- @Id : 데이터베이스의 테이블 PK에 적용한다.
JpaMain.java 생성
public class JpaMain {
public static void main(String args[]) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin(); // 트랜잭션 시작
try {
/* 등록 */
instMember(em);
/* 조회 */
findMember(em);
/* 삭제 */
deltMember(em);
/* 수정 */
updtMember(em);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
회원 등록
public static void instMember(EntityManager em) {
Member memberA = new Member();
memberA.setId(20L);
memberA.setName("memberA");
em.persist(memberA);
Member memberB = new Member();
memberB.setId(30L);
memberB.setName("memberB");
em.persist(memberB);
}
- persist() : 영속성 컨텍스트에 엔티티를 저장한다.
회원 조회
public static void findMember(EntityManager em) {
Member findMember = em.find(Member.class, 20L);
System.out.println("findMember.getId : "+findMember.getId());
System.out.println("findMember.getName : "+findMember.getName());
}
- find() : JPA가 관리하는 엔티티 클래스 및 Id 값으로 데이터를 조회한다.
회원 삭제
public static void deltMember(EntityManager em) {
Member member = em.find(Member.class, 20L);
em.remove(member);
}
- remove() : 해당 엔티티를 삭제한다.
회원 수정
public static void updtMember(EntityManager em) {
Member member = em.find(Member.class, 30L);
member.setName("memberC");
System.out.println("member : "+member);
}
- find()를 통해 영속성 컨텍스트에서 조회한 객체의 데이터를 변경하면 엔티티가 수정된다.
주의할 점
- 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유
- 엔티티 매니저는 쓰레드간에 공유 X(사용하고 버려야 한다.)
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행되어야 한다.
JPQL
- JPA를 사용하면 엔티티 객체를 중심으로 개발할 수 있다.
- 데이터를 검색 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색한다.
- 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다.
- 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검 색 조건이 포함된 SQL이 필요하다.
- JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.
- SQL과 문법 유사하며 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원한다.
- JPQL은 엔티티 객체를 대상, SQL은 데이터베이스 테이블을 대상으로 Query를 작성한다.
- 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 Query이다.
- SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.
- JPQL을 한마디로 정의하면 객체 지향 SQL 이라고 할 수 있다.
해당 글은 인프런의 [자바 ORM 표준 JPA 프로그래밍 - 기본편] 강의를 정리한 내용입니다.
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com
'JPA > JPA' 카테고리의 다른 글
[JPA] 다양한 연관관계 매핑 - 다대일, 일대다 (0) | 2023.04.14 |
---|---|
[JPA] 연관관계 기초 (0) | 2023.04.12 |
[JPA] 엔티티 매핑 (0) | 2023.04.12 |
[JPA] 플러시와 준영속 상태 (0) | 2023.04.11 |
[JPA] 영속성 컨텍스트 (0) | 2023.04.11 |
댓글