[JPA-02] JPA 사용해 보기

이가희·2024년 11월 17일
3

JPA

목록 보기
2/16
post-thumbnail

** 이 포스팅은 MySQL, SQL 문, JAVA에 대한 기본적인 지식을 가지고 있다고 전제합니다.

이번에는, 앞선 글에서 살펴보았던 JPA를 간단히 사용해 볼 것이다.

Chapter

1. JPA 기본 설정
2. JPA 간단하게 사용하기

1. JPA 기본 설정

사용 툴 : 인텔리제이
사용 DBMS : MySQL

먼저, spring Initializr을 통해 프로젝트를 생성한다.

사진과 같이 의존성을 추가하고 GENERATE 버튼을 클릭한 후 inteliJ에서 해당 파일을 열어준다.

그런 다음, src/main/resources/application.yml (만약 application.properties로 되어 있다면 properties to YAML Converter을 설치해 yml로 전환하는 것을 추천한다)
로 들어가 jpa 설정을 추가한다.

spring:
    application:
        name: jpaProject
    datasource: //database 설정 
        driver-class-name: com.mysql.cj.jdbc.Driver
        password: 1234
        url: jdbc:mysql://localhost:3306/jpaProject
        username: abc1234
    jpa: //jpa 설정
        database: mysql //mysql을 사용할 것이니 database는 mysql로 적어주면 된다.
        hibernate:
            ddl-auto: update //이 설정은 추후에 자세히 설명하겠다. 일단은 update로 해 두자.
            naming:
                physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
        properties:
            hibernate:
                format_sql: true
                show_sql: true

자, SpringJpa를 사용하려면 여기까지만 설정을 마치면 된다.
그런데 우리는 순수 Jpa를 사용할 것이기 때문에 resource 하위에 META-INF directory를 만들고 persistence.xml 파일을 만들어 다음을 추가한다.
여기서 persistence-unit 의 name은 마음대로 지정해도 된다.
persistence-unit은 영속성 유닛이라는 것이고, 연결 DB 당 하나의 영속성 유닛을 등록한다. 프로그램을 실행하면, META-INF/persistence.xml 패스 경로를 자동으로 읽고, 이 정한 이름을 통해 entityManagerFactory를 생성 할 수 있다. 잘 모르겠으면 여기서는 넘겨도 좋다.

<?xml version="1.0" encoding="utf-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="jpabook">
        <properties >
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="1234"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpaProject"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>

            <!-- option -->
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

그런 다음 우리가 연습 삼을 table을 간단히 만들어 준다.

create database jpaProject; 

create table MEMBER (
ID varchar(255) not null primary key,
USER_NAME varchar (255),
AGE INTEGER
);

그리고 이에 맞게 member class도 간단히 작성한다.

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Member {
   private String id;
   private String name;
   private  Integer age;
}

자 그럼 이제 기본적인 준비가 되었다.


2. JPA 간단하게 사용하기

JPA는 SQL이 아닌 객체를 database와 매핑시킨다고 하였다.
그래서 먼저 우리는 회원 클래스와 회원 테이블을 매핑하는 것을 해 볼 것이다.
아까 만든 회원 클래스를 다음과 같이 구성해 주면, 매핑이 이뤄진다.
@Entity //이 클래스를 테이블과 매핑한다고 JPA에게 알려준다.
@Table(name = "MEMBER") //매핑할 테이블을 지정한다. 
@Getter
@Setter
public class Member {

    @Id //pk가 될 컬럼에 붙여주어야 한다. 그럼 이 필드는 식별자 필드가 될 것이다.
    @Column(name = "ID") //매핑할 컬럼 네임을 지정한다.
    private String id;

    @Column(name = "USER_NAME")
    private String name;

    private Integer age; //만약 매핑할 컬럼 네임을 지정하지 않으면, 자동적으로 같은 이름을 가진 컬럼과 매핑이 된다.
}

자 그럼 이제 간단하게 사용 해 볼 것이다.
전체적인 틀은 아래와 같다.

@SpringBootApplication
public class JpaProject {

    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); //엔티티 메니저 팩토리 생성

        EntityManager em = emf.createEntityManager();  //엔티티 매니저 생성
        EntityTransaction tx = em.getTransaction(); //트랜잭션 획득
      

        try {
            tx.begin(); // 트랜잭션 시작

            //비즈니스 로직 작성

            tx.commit(); //트랜잭션 커밋
        } catch (Exception e) {
            tx.rollback(); //트랜잭션 롤백
        } finally {
            em.close(); //엔티티 메니저 종료
        }
        emf.close(); // 엔티티 매니저 팩토리 종료

    }

}
  • 엔티티 메니저 팩토리
    위에서 정한 고유의 이름을 넣으면, META-INF/persistence.xml 에서 이름이 jpabook인 영속성 유닛을 찾아 엔티티 매니저 팩토리를 생성하게 된다. 이는 JPA를 동작시키기 위한 기반 객체를 만들고, 데이터베이스 커넥션 풀도 생성한다. 따라서 생성하는 비용이 아주 크므로 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 한다.
  • 엔티티 매니저
    JPA의 대부분의 기능은 엔티티 매니저가 제공한다. 엔티티 매니저를 통해 뎅터베이스에 등록/수정/삭제/조회를 할 수 있다. 다만 데이터베이스 커넥션과 밀접한 관계가 있어 스레드 간에 공유하거나 재사용해서는 안 된다.

여기서 이제 회원 객체를 하나 등록하는 간단한 비즈니스 로직을 추가 해 보겠다.

package com.jpa.demo;

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JpaProject {

    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");

        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();

        try {
            tx.begin(); // 트랜잭션 시작

            //비즈니스 로직 작성

            Member member = new Member();
            member.setId("id");
            member.setName("userName");
            member.setAge(5);

            em.persist(member); //등록
            Member findMember = em.find(Member.class, "id"); //조회
            System.out.println("findMember : " + findMember.getName());
            //비즈니스 로직 끝
            
            tx.commit(); //트랜잭션 커밋
        } catch (Exception e) {
            tx.rollback(); //트랜잭션 롤백
        } finally {
            em.close(); //엔티티 메니저 종료
        }
        emf.close(); // 엔티티 매니저 팩토리 종료

    }

}

출력 결과로 userName이 나오고, DB에도 저장된 것을 볼 수가 있을 것이다.
이렇게 간단하게 JPA를 사용해 보았다.
다음 시간에는 영속성에 대해서 알아보겠다.

참조: 자바 ORM 표준 JPA 프로그래밍 - 김영한

profile
안녕하세요 개발하는 사람입니다.

0개의 댓글

관련 채용 정보