JPA / Spring Data JPA / Hibernate 란?
Spring Data JPA 란?
Spring Data JPA를 이해하기 위해서는, 과련된 기술을 이해할 필요가 있다.
관련 기술을 포함해서, 각각의 개요를 표로 만들었다.
기술명 | 내용 |
---|---|
JPA | Java Persistence API의 약자 |
Java로 ORM을 이용하기 위한 사양 | |
Hibernate | JPA(사양)의 구현체 중 하나 |
Spring에서 JPA를 이용할 경우, Hibernate가 JPA의 기본구현체로 선택됨 | |
다른 JPA프로바이더 로써는 EclipseLink가 있다. | |
Spring Framework | 우리가 열공하고있는 그.. 프레임웍 ^^; |
Spring Data | Spring Framework중에서도 데이터 엑세스에 관한 프레임웍 |
Spring Data XXXX라는 프레임웍이 몇가지 있고, 그 중에서 SpringData는 비교적 최신 프레임웍 | |
Spring Data JPA | Spring Data의 하위 프레임워크 중 하나 |
JPA의 구현체가 아님 | |
JPA를 사용하기 쉽게 하기 위해 만들어진 추상클래스 및 인터페이스의 집합체 |
Java에서 ORM을 이용하고 싶다.
- JPA라는 사양을 따라야 할 필요가 있다.
- JPA를 사용하기 쉽도록 만든 Spring Data JPA를 이용한다.
라는것이 됨.
JPA만으로도 ORM구현이 가능하나, Spring Data JPA을 사용하는 것이 더욱 편하다는 것이 포인트
JPA 는 무슨 사양?
JPA는 Entity 와 EntityManager 두가지를 이용하여 데이터베이스 엑세스를 실현하는 사양이다.
| |
| :------ | :-------- |
| Entity | 메모리 상의 Java오브젝트 |
| | 1 Entity에 대해서 1테이블이 맵핑 된다 |
| | EntityManager는 DB와 Entity오브젝트를 동기화 한다 |
| EntityManager | DB와 Entity를 동기화 한다 |
| | PersistentContext라는 영역에서 Entity를 관리한다 |
| | 등록처리 = 새로운 Entity를 EntityManager경유로 PersistentContext에 등록 |
| | 갱신처리 = DB랑 동기화가 된 Entity를 갱신한다. |
| | 취득처리 = EntityManager가 SQL을 발행 / 결과가 맵핑된 Entity를 취득한다. |
JPA단일로는(Spring Data JPA를 안쓰는상태) entityManager클래스의 메서드가 직접 실행하도록 하는 코딩을 해야한다.
그러므로 id가 key인 Teacher테이블을 검색 할 경우 이렇게 된다.
String id = "1";
String query = "SELECT teacher FROM TeacherEntity teacher WHERE teacher.id = " + id;
TeacherEntity teacher = entityManager.createQuery(query).getSingleResult();
이런 방식의 코딩이 된다. 위의 코드에서처럼 ID검색 과 같은 자주 쓰이는 패턴들을 Spring Data JPA가 제공해주는 것이다.
↓↓↓ Spring Data JPA를 사용하면 이렇게 된다 ↓↓↓
String id = "1";
Optional<TeacherEntity> teacher = teacherRepository.findById(id);
이렇게 EntityManager를 직접 다루지 않고, Spring Data JPA가 제공해주는 findById라는 메서드를 이용함으로써 select가 가능하다