Hibernate 와 JPA 그리고 Spring Data JPA

Daeyoung Nam·2021년 7월 11일
1

Java

목록 보기
1/1

Hibernate

Hibernate란 Java Persistence API(JPA)를 이용하여 구현된 ORM 프레임워크이다.
도메인 모델을 RDB로 매핑하기 위한 기능들을 지원해준다.
객체를 테이블로 매핑시켜주고 테이블을 객체로 매핑시켜준다.

JPA (Java Persistence API)

JPA는 자바 ORM의 표준으로 인터페이스이다. 인터페이스라는 말은 표준을 제공하는것이지 실제로 동작하는 모듈이 아니라는것이다.
즉 Hibernate는 JPA의 구현체이다.

기본적으로 RDB는 자바 객체와 매핑하기가 쉽지 않다.
JPA는 이러한 Java와 RDB간 데이터베이스 이벤트를 객체지향적이고 도메인/비즈니스 레벨에 더 집중할 수 있도록 지원해주는 API다.

JPA 동작원리

다음과 같이 JPA는 내부적으로 JDBC를 호출해야한다.
개발자가 JDBC를 직접사용하지 않도록 설계되어있다.

JPA Entity

import lombok.*;
import javax.persistence.*;

@Entity(name = "MemberClassEntity")
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class MemberClassEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "class_name")
    private String className;

    public MemberClassEntity(String className) {
        this.className = className;
    }

    @Override
    public String toString() {
        return "MemberClassEntity{" +
                "id=" + id +
                ", className='" + className + '\'' +
                '}';
    }
}

JPA Entity는 RDB의 테이블과 직접 매핑되는 객체이다.
클래스 선언부 위에 @Entity 어노테이션을 달아주면 JPA Entity 클래스가 된다.

Entity <-> RDB

persist(Object object) // Entity를 RDB에 저장하는 메소드

merge(Object object) // Entity를 RDB에 수정하는 메소드

remove(Object object) // Entity를 RDB에서 삭제 메소드

find(Class<?> entityClass, Object primaryKey); // Entity를 entityClass로 매핑하고 primaryKey로 찾는 메소드

Spring data jpa

Hibernate를 사용해본 사람은 알겠지만 EntityManager로 crud를 할 수 있다.
하지만 Spring data jpa에서는 EntityManager가 아닌 Repository라는 놈으로 아주아주 편하게 CRUD를 할 수 있게되어있다.
과연 이것은 어떻게 가능한것일까?

Spring data jpa는 JPA를 한단계 더 추상화 시켜 Repository를 개발하였다.
즉 Repository의 구현부에서 JPA를 사용하고 있다는 뜻이다.
우리는 Repository에 규칙에 맞는 메소드를 입력하게되면 알아서 쿼리문이 만들어지고 쿼리가 날아간다.

이 내부에는 JPA가 구현되어있는것이다!!

Hibernate, JPA를 직접 다뤄보자

다음편에는 내가 실제로 일반 자바프로젝트에서 Hibernate, JPA를 도입하면서 겪은 일들을 글로 적어보겠다.

profile
내가 짠 코드가 제일 깔끔해야하고 내가 만든 서버는 제일 탄탄해야한다 .. 😎

0개의 댓글