230309 - Hibernate, Spring Data JPA

Cornchip·2023년 3월 9일
0

Today-I-Learned

목록 보기
19/28

목차
1. Hibernate
2. Spring Data JPA



1. Hibernate

1) Hibernate

  • "More Than An ORM, Discover The Hibernate Galaxy."
  • 자바생태계를 대표하는 ORM framework
  • 스프링 부트에서 채택한 메인 ORM framework
  • JPA 표준 스펙을 구현한 JPA Provider
  • 고성능, 확장성, 안정성을 표방
  • 다양한 하위 제품들로 나뉨
    • Hibernate ORM
    • Hibernate Validator
    • Hibernate Reactive

2) Hibernate Query Language: HQL

  • 하이버네이트가 사용하는 SQL 스타일의 비표준 쿼리 언어
  • 객체 모델에 초점을 맞춰 설계됨
  • JPQL의 바탕이 됨(JPQL은 HQL의 subset)
    • JPQL은 완벽한 HQL 문장이지만, 반대로는 성립하지 않음
  • ex)
Query query = entityManager.createQuery(
  "select p from Person p where p.name like :name"
);

TypedQuery<Person> typedQuery = entityManager.createQuery(
  "select p from Person p where p.name like :name", Person.class
);

3) Criteria query

  • type-safety를 제공하는 JPQL의 대안 표현법
  • ex)
CriteriaBuilder builder = entityManager.getCriteriaBuilder();

CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
Root<Person> root = criteria.from(Person.class);
criteria.select(root);
criteria.where(builder.equal(root.get(Person_.name), "John Doe"));

List<Person> persons = entityManager.createQuery(criteria).getResultList();

4) Native SQL Query

  • 특정 DB에 종속된 SQL도 사용 가능
  • ex)
List<Object[]> persons = entityManager.createNativeQuery(
  "SELECT * FROM Person")
  .getResultList();


2. Spring Data JPA

1) Spring Data JPA

  • 스프링에서 제공하는 JPA 추상화 모듈
  • JPA 구현체의 사용을 한 번 더, Repository라는 개념으로 추상화
  • JPA 구현체의 사용을 감추고, 다양한 지원과 설정 방법을 제공
  • JPA 기본 구현체로 Hibernate 사용
  • Querydsl 지원

2) Spring Data JPA를 사용한다면

  • JPA, 하이버네이트를 몰라도 되어야 한다.
  • EntityManager를 직접 사용하지 않는다.
  • JPQL을 직접 사용하지 않는다.
  • persist(), merge(), close()를 직접 사용하지 않는다.
  • 트랜잭션을 getTransaction(), commit(), rollback()으로 관리하지 않는다.
  • 코드가 하이버네이트를 직접 사용하고 있다면
    • 꼭 필요한 코드인지, 아니면 Spring Data JPA로 할 수 있는 일인지 확인하기
    • 그 코드는 하이버네이트와 직접적인 연관 관계를 가지게 됨
    • 추상화의 이점을 포기하게 되는 것이다!
profile
cornchip

0개의 댓글