본문 바로가기

Spring/자바 ORM 표준 JPA 프로그래밍

02. JPA 시작하기

💡 본 게시글은 김영한님의 인프런(Inflearn) 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편에 대해 공부하고, 정리한 내용입니다.

1. 프로젝트 생성

1) IntelliJ IDEA에서 프로젝트 생성

  1. - IntelliJ IDEA를 실행한 후, [파일] > [새로 만들기] > [새 프로젝트] 메뉴를 선택하여 새 프로젝트를 생성합니다.
  2. - 프로젝트 생성 시, 프로젝트 SDK와 빌드 도구(Maven 또는 Gradle)를 선택합니다.
  3. - Maven 프로젝트를 사용하는 경우 pom.xml 파일을 통해 종속성을 관리합니다.
  4. - Gradle 프로젝트를 사용하는 경우 build.gradle 파일을 통해 종속성을 관리합니다.

2. 종속성 설정

1) Hibernate 라이브러리 추가

- JPA를 사용하기 위해 Hibernate 라이브러리를 추가합니다.

(1) Maven 프로젝트

- pom.xml 파일에 다음과 같은 종속성을 추가합니다:

    
        org.hibernate
        hibernate-entitymanager
        5.6.14.Final
    

            

(2) Gradle 프로젝트

- build.gradle 파일에 다음과 같은 종속성을 추가합니다:

dependencies {
    implementation 'org.hibernate:hibernate-entitymanager:5.6.14.Final'
}
            

3. Persistence.xml 설정

1) JPA 설정 파일 생성

- JPA의 설정 정보를 담는 META-INF/persistence.xml 파일을 생성합니다. 이 파일에는 데이터베이스 연결 정보와 JPA 관련 설정이 포함됩니다.

- 예를 들어, H2 데이터베이스를 사용하는 경우 다음과 같이 설정할 수 있습니다:

    
        
            
            
            
            
            
            
            
            
            
            
            
        
    

            

2) 주요 설정 항목

  1. - javax.persistence.jdbc.driver: JDBC 드라이버 클래스명.
  2. - javax.persistence.jdbc.url: 데이터베이스 연결 URL.
  3. - hibernate.dialect: Hibernate가 사용할 데이터베이스 방언(Dialect).
  4. - hibernate.show_sql: 실행되는 SQL을 콘솔에 출력할지 여부.

4. 객체 매핑 설정

1) 데이터베이스 및 테이블 생성

- JPA 엔티티와 매핑될 데이터베이스와 테이블을 생성합니다. 예를 들어, JPA_TEST라는 데이터베이스와 MEMBER 테이블을 다음과 같이 생성합니다:

CREATE DATABASE JPA_TEST;
CREATE TABLE MEMBER (
    ID VARCHAR(255) NOT NULL,
    NAME VARCHAR(255),
    AGE INT,
    PRIMARY KEY (ID)
);
            

2) 회원 클래스 생성

- Member 클래스를 생성하고 JPA 엔티티로 매핑합니다. 클래스에 JPA 어노테이션을 사용하여 데이터베이스 테이블과 필드를 매핑합니다:

@Entity
@Table(name="MEMBER")
public class Member {
    @Id
    @Column(name = "ID")
    private String id;

    @Column(name = "NAME")
    private String username;

    private Integer age;

    // Getters and Setters
}
            

3) 주요 어노테이션

  1. - @Entity: 이 클래스를 JPA 엔티티로 지정합니다.
  2. - @Table: 엔티티가 매핑될 테이블 이름을 지정합니다. 생략 시 클래스 이름이 테이블 이름으로 사용됩니다.
  3. - @Id: 엔티티의 기본 키를 나타냅니다.
  4. - @Column: 엔티티 필드와 데이터베이스 컬럼을 매핑합니다. 생략 시 필드명이 컬럼명으로 사용됩니다.

5. JPA 시작하기

1) JPA 설정 및 비즈니스 로직 구현

- Main 클래스를 통해 JPA 설정과 트랜잭션 관리를 수행합니다. EntityManagerFactory와 EntityManager를 생성하고 트랜잭션을 관리하는 예시 코드:

public class Main {
    public static void main(String[] args) {
        // 엔티티 매니저 팩토리 생성
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hellojpa");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();

        try {
            tx.begin(); // 트랜잭션 시작
            logic(em);  // 비즈니스 로직 실행
            tx.commit(); // 트랜잭션 커밋
        } catch (Exception e) {
            tx.rollback(); // 예외 발생 시 트랜잭션 롤백
        } finally {
            em.close(); // 엔티티 매니저 종료
        }
        emf.close(); // 엔티티 매니저 팩토리 종료
    }

    private static void logic(EntityManager em) {
        String id = "user123";
        Member member = new Member();
        member.setId(id);
        member.setUsername("John Doe");
        member.setAge(25);

        // 등록
        em.persist(member);

        // 수정
        member.setAge(30);

        // 한 건 조회
        Member findMember = em.find(Member.class, id);
        System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());

        // 목록 조회
        List members = em.createQuery("select m from Member m", Member.class).getResultList();
        System.out.println("members.size=" + members.size());

        // 삭제
        em.remove(member);
    }
}
            

2) 주요 코드 구조

  1. - 엔티티 매니저 설정: EntityManagerFactory 생성 후 EntityManager 생성.
  2. - 트랜잭션 관리: 트랜잭션 시작, 커밋, 롤백 처리.
  3. - 비즈니스 로직: 회원 엔티티 등록, 수정, 삭제, 조회.

6. JPQL 사용

1) JPQL(Java Persistence Query Language)

- JPQL은 객체 지향 쿼리 언어로, 엔티티 객체를 대상으로 쿼리를 실행합니다.

(1) JPQL 예시

TypedQuery query = em.createQuery("select m from Member m", Member.class);
List members = query.getResultList();
            

(2) JPQL과 SQL의 차이점

  1. - JPQL: 엔티티 객체를 대상으로 쿼리 (예: select m from Member m).
  2. - SQL: 데이터베이스 테이블을 대상으로 쿼리 (예: SELECT * FROM MEMBER).

- JPA는 JPQL을 분석하여 적절한 SQL을 생성하고, 이를 데이터베이스에 전달하여 실행합니다.

'Spring > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글

06. 다양한 연관관계 매핑  (1) 2024.09.08
05. 연관관계 매핑 기초  (0) 2024.09.08
04. 엔티티 매핑  (1) 2024.09.08
03. 영속성 관리 - 내부 동작 방식  (0) 2024.08.11
01. JPA 소개  (0) 2024.07.24