JPA 02. JPA 시작하기

MIRA KIM·2022년 12월 12일
0
post-thumbnail

개발환경

JAVA 8 / Maven / h2

setting

  • persistence.xml : 필요한 설정 정보 관리 / JPA 설정 파일
    • DB 정보(driver, user, pw, url) 및 DB방언 설정
      • 데이터베이스 방언이란? DB마다 다른 SQL문법및 함수
      • JPA는 특정 데이터베이스에 종속되지 않으므로 DB방언을 설정하여 이러한 옵션을 맞춰줌
    • 각종 옵션 설정(쿼리 로그 보기 등)

JPA구동방식

  1. Persistence를 이용하여 설정정보(persistence.xml)를 조회
  2. 설정정보를 통하여 EntityManagerFactory 생성
  3. EntityManagerFactory을 이용하여 EntityManager 생성

주의

  • 일반적으로 EntityManagerFactory는 하나만 생성하여 애플리케이션 전체에 공유
  • EntityManager는 쓰레드간 공유 불가 / 사용후 close처리 필수
  • JPA의 모든 데이터 변경은 트랜잭션 안에서실행

JPQL의 필요성

  • JPA를 사용하면 엔티티 객체를 중심으로 개발
    실제 현장에서는 복잡한 검색 쿼리가 필요한 경우가 많음
    JPA의 객체대상 검색이 한계가 있어 SQL문이 필요
    👉 JPA는 SQL을 추상화한 객체지향쿼리언어 제공

JPQL이란

  • 객체를 대상으로 검색하는 객체 지향 쿼리
  • 특정 DB에 의존하지 않음

실습 코드

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

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 {
			/* 저장 */
//			Member member = new Member();
//			member.setId(2L);
//			member.setName("hello2");
//			em.persist(member);

			/* 수정 */
//			Member member = em.find(Member.class, 1l);
//			member.setName("newName");
			// 트랜잭션 직전에 변경사항을 점검하고 커밋을 날림
			// persist를 할 필요가 없음

			/* 각종 조회 */
			List<Member> resultList = em.createQuery("select m from Member as m", Member.class).setFirstResult(1)
					.setMaxResults(3).getResultList();

			tx.commit();
		} catch (Exception e) {
			tx.rollback();
		} finally {
			em.close();
		}
		emf.close();
	}
}

0개의 댓글