[JPA] JPA로 DB 연동하기

박이레·2022년 9월 15일
0

JPA

목록 보기
5/6

 드디어 JPA입니다. 여기까지 오기 위해 기나긴 여정을 했습니다. JDBC, myBatis, Hibernate를 거쳐왔습니다. 이것들은 과거의 DB 연동 기술입니다.

이제 현재의 DB 연동 기술인 JPA를 이용해 DB 연동을 해보겠습니다. 언젠가 JPA도 과거가 되겠지만, 지금 이 순간만큼은 현재입니다.

JPA는 Java ORM 기술 표준이다.

DB연동이 얼마나 편해졌는지 한번 살펴볼까요?


실습 순서는 다음과 같습니다.

① Entity 작성
② JPA 메인 설정 파일 작성
③ Client 작성


1. Entity

DB 테이블과 연결되는 클래스를 Entity Class라고 합니다. 기존의 VO와 유사한 개념입니다.

package com.rubypaper.biz.domain;

import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;

@Data
@Table(name = "S_EMP")
@Entity
public class Employee {

    @Id
    private Long id;

    private String name;

    private String mailId;

    @Column(name = "START_DATE")
    private Date startDate;

    private String title;

    @Column(name = "DEPT_NAME")
    private String deptName;

    private Double salary;

    @Column(name = "COMMISSION_PCT")
    private Double commissionPct;
}

2. JPA 메인 설정 파일

myBatis, Hibernate 메인 설정 파일과 비슷합니다.

① 데이터 소스를 설정합니다. 여기서는 H2 DB를 설정했습니다.

② JPA 구현체를 설정합니다. (아래에서는 Hibernate를 사용했습니다.)

③ DB에 맞는 Dialect를 설정합니다. (아래에서는 H2를 사용했습니다.)

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

    <!-- 영속성 유닛 설정 -->
    <persistence-unit name="Chapter02">

        <!-- JPA 프로퍼티 설정 -->
        <properties>
            <!-- 데이터 소스 관련 설정 -->
            <property name="javax.persistence.jdbc.driver"
                      value="org.h2.Driver" />
            <property name="javax.persistence.jdbc.user" value="sa" />
            <property name="javax.persistence.jdbc.password" value="" />
            <property name="javax.persistence.jdbc.url"
                      value="jdbc:h2:tcp://localhost/~/test" />

            <!-- JPA 구현체 관련 설정 -->
            <property name="hibernate.dialect"
                      value="org.hibernate.dialect.H2Dialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.id.new_generator_mappings"
                      value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>

    </persistence-unit>
</persistence>

3. Client

myBatis, Hibernate Client와 비슷합니다. 다만 JPA의 등록/수정/삭제는 transaction 안에서 실행되어야 하므로 transaction 코드가 추가되었습니다.

package com.rubypaper.biz.client;

import com.rubypaper.biz.domain.Employee;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.Date;

public class EmployeeServiceClient {

    public static void main(String[] args) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("Chapter02");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();

        try {
            Employee employee = new Employee();
            employee.setId(1L);
            employee.setName("둘리");
            employee.setMailId("gurum");
            employee.setStartDate(new Date());
            employee.setTitle("과장");
            employee.setDeptName("총무부");
            employee.setSalary(2500.00);
            employee.setCommissionPct(12.50);

            tx.begin();

            em.persist(employee);

            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();

            tx.rollback();
        } finally {
            em.close();
            emf.close();
        }
    }
}

실행 결과

콘솔에 실행 결과가 나타납니다. DB에도 데이터가 들어갔는지 확인해볼까요?

DB에도 데이터가 정상적으로 들어왔습니다.


저는 JPA를 익히기 위해 책을 세 권 구매했습니다. 세 권의 책에서 공통적으로 말하는 것이 있습니다.

"Entity와 Table을 어떻게 매핑하느냐가 JPA의 핵심이자 전부다"

JPA에는 엔티티 매핑 설정, 식별자 값 설정, 영속 컨테스트 등 내용이 있지만 여기서 다루지 않겠습니다. 대신 이후 글에서는 JPA의 핵심이자 전부인 내용을 정리하겠습니다. 연관관계 매핑입니다.


완성 코드

💁‍♂️reference

JPA 퀵스타트

채규태 지음ㅣ루비페이퍼ㅣ2020ㅣ도서 정보

EOD.

profile
혜화동 사는 Architect

0개의 댓글