- 전체
- JAVA 일반
- JAVA 수학
- JAVA 그래픽
- JAVA 자료구조
- JAVA 인공지능
- JAVA 인터넷
- Java Framework
- Java GUI (AWT,SWING,SWT,JFACE)
- SWT and RCP (web RAP/RWT)[eclipse], EMF
JAVA 자료구조 [Java 자료구조] JPA와 Spring Data JPA의 차이
2022.09.09 15:33
[Java 자료구조] JPA와 Spring Data JPA의 차이
JPA와 Spring Data JPA의 차이
JPA의 핵심인 EntityManager
와 EntityManagerFactory
라이브러리는 Entity CRUD를 처리한다. 하지만 EntityManager
를 직접 작성하는 경우는 거의 없고, 주로 Repository Interface만 사용한다.
Repository Interface 사용시 장점은 다음과 같다.
EntityManager
를 직접 작성하지 않아도 DB 에 Entity CRUD 처리됨@Repository
annotation을 추가하지 않아도 Bean 으로 자동 등록됨
여기서 말하는 Repository interface는 Spring Data JPA이다. JPA 와 Spring Data JPA 는 완전히 같은 개념이 아니다.
이쯤되면 @Repository
와 Repository interface
차이가 무엇인지, JPA와 Spring Data JPA의 차이가 무엇인지 혼란이 오는데 해당 포스트에 최대한 잘 이해되도록 공부한 내용을 작성했다.
JPA (Java Persistence API)
애플리케이션을 객체지향 언어로 개발하고 관계형 DB 로 관리한다음 객체-관계형간의 차이를 해결하기 위해 JPA를 사용한다.
JPA를 정의한 javax.persistence
패키지 대부분이 Interface 와 enum으로 구성되어있고 JPA의 핵심인 EntityManager
도 interface로 정의되어 있다.
아래는 EntityManager Interface
의 실제 코드 일부이다.
package javax.persistence;
import ...
public interface EntityManager {
public void persist(Object entity);
public <T> T merge(T entity);
public void remove(Object entity);
// more...
}
즉, JPA는 자바 진영에서 ORM 기술 표준으로 Application 과 JDBC 사이에서 동작한다.
- ORM (Object Relational Mapper) : 직접 SQL을 작성하지 않고도 객체지향 방식으로 DB에 접근
- JDBC (Java Database Connectivity) : Java에서 DB에 접속할 수 있도록 하는 자바 API
Hibernate는 JPA의 대표적인 프레임워크이다.
Hibernate
JPA는 Interface의 모음이며 이를 구현한 구현체로 Hibernate, EclipseLink, DataNucleus 등 여러 ORM framework가 존재하는데 주로 Hibernate를 사용한다.
즉, JPA 핵심인 EntityManagerFactory
, EntityManager
, EntityTransaction
Interface를 Hibernate에서 Interface로 상속받아 Impl로 구현했다.
출처 : https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
package org.hibernate;
public interface SessionFactory extends EntityManagerFactory, HibernateEntityManagerFactory … {}
public interface Session extends SharedSessionContract, EntityManager … {}
public interface Transaction extends EntityTransaction {}
Hibernate의 SessionFactory
, Session
, Transaction
Interface의 실제 코드를 보면 JPA Interface 인 EntityManagerFactory
, EntityManager
, EntityTransaction
를 상속받아 구현되어있다.
Spring Data JPA
Spring Data JPA 란 JPA 를 추상화시킨 Repository Interface 를 제공하여 개발자가 JPA 를 더 편하게 사용할 수 있게 하는 모듈이다.
Spring Data JPA를 사용하지 않는다면 클래스에 @Repository
annotation 을 작성하고 JPA를 적용한 다음 EntityManager의 API 를 직접 호출해야 entity CRUD 가 처리된다.
Spring Data JPA 의 Repository Interface (SimpleJpaRepository)
에는 EntityManager 가 포함되어 있기 때문에 직접 작성하지 않아도 내부에서 자동으로 호출된다. 또한, @Repository
annotation 작성하지 않아도 spring data JPA가 알아서 Bean으로 등록해준다.
SimpleJpaRepository
SimpleJpaRepository
는 Spring Data JPA 가 제공하는 가장 많은 기능을 가지고 있는 가장 밑단에 있는 클래스이다.
package org.springframework.data.jpa.repository.support;
import ...
public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID> {
private final EntityManager em;
...
}
Repository Interface 의 기본 구현체인 SimpleJpaRepository
의 실제 코드를 보면 내부에서 EntityManager 를 사용하고 있기 때문에 직접 작성할 필요가 없다.
JPA repository method 작성법
Repository Interface 에 정해진 규칙대로 method 입력시 Spring 이 알아서 method 에 적합한 JPQL 을 생성해 처리한다.
- findBy
entity 속성이름
: entity 속성이름으로 검색 - findByEmailOrUserId (String email, String userId) : 여러 필드로 검색
- countBy
entity 속성이름
: entity 속성이름에 해당하는 결과 개수를 반환
작성 예시는 아래 링크를 참고면 된다.
- http://docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/#jpa.sample-app.finders.strategies
- https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
- https://github.com/spring-projects/spring-data-examples/blob/main/jpa/example/src/main/java/example/springdata/jpa/simple/SimpleUserRepository.java
[출처] https://velog.io/@evelyn82ny/JPA-vs-Spring-Data-JPA
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.