본문 바로가기
JPA/JPA

[JPA] 애플리케이션 개발

by yoon_seon 2023. 4. 11.

JPA

JPA의 구동 방식

  1. Persistence 클래스에서 META-INF/persistence.xml을 조회한다.
    이때, META-INF/persistence.xml의 persistence-unit nameEntityManagerFactory의 persistenceUnitName를 동일하게 매핑시켜야 한다.
  2. EntityManagerFactory를 생성한다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
  1. 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

댓글