웹(Web)/백엔드(Backend)

JPA와 SpringData JPA(Repository)

SK_MOUSE 2022. 1. 27. 23:01
반응형

영상 참고

ORM VS SQL Mapper

가) ORM

  • DB Data  매핑  Object 필드
    • 객체를 통해 간접적으로 DB Data를 다룹니다.
  • 객체와 DB의 데이터를 자동으로 매핑해줍니다.
    • SQL 쿼리가 아닌 메서드로 데이터를 조작할 수 있습니다.
    • 객체간 관계를 바탕으로 SQL을 자동으로 생성 합니다.
  • Persistant API라고 할 수 있습니다.
  • JPA, Hibernate 

나) SQL Mapper

  • SQL  매핑  Object 필드
  • SQL 문으로 직접 DB를 조작합니다.
  • 예) Mybatis, jdbcTemplate

위 내용 출처: https://data-make.tistory.com/541


 

JPA(JAVA Persistence API) 설명

- 영속성 컨텍스트(Persistent Context)

  1. Entity Manager 생성(Entity Manager Factory)를 통해 생성
  2. Entity Manager가 가지고 있는 트랜잭션(Transaction)을 시작
  3. Entity Manager를 통해 영속 컨텍스트에 접근하고 객체를 작업
  4. 트랜잭션을 커밋(Commit)하여 DB에 반영
  5. Entity Manager 종료
  • @Entity : 해당 클래스가 JPA 엔티티 클래스라고 정의
  • @Table : 해당 클래스가 DB의 어느 테이블에 매핑되는지 정의
  • @Id : DB 테이블의 Primary Key 칼럼과 매핑
  • @Column : 매핑할 데이터베이스의 칼럼 이름과 필드 변수의 이름이 다를 경우 매핑하기 위해 사용

테이블 구성

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);

    public <T> T find(Class<T> entityClass, Object primaryKey);

    // More interface methods...
}

Hibernate  JPA 인터페이스의 구현체 → 라이브러리!(Library)

위 사진처럼 JPA의 핵심 인터페이스 EntityManagerFactory, EntityManager, EntityTransaction  

Hibernate 에서 각각 SessionFactory, Session, Transaction 으로 상속받고 각각 Impl 로 구현한 것을 확인할 수 있습니다.

 

=> JPA를 사용하기 위해 꼭 Hibernate를 사용할 필요는 없다!

=> 그래서 JPA만 따로 공부하는것.

 


결론. Spring Data JPA

Repository : JPA를 한 단계 더 추상화 시킨 인터페이스

  • 구현에 있어서 JPA를 사용합니다.
  • 사용자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring 이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해줍니다.
    • 메서드 호출
    • 해당 메서드에 해당하는 쿼리 실행 구현체 생성
    • Bean으로 등록
  • public interface MemberRepository extends JpaRepository<Member, Long> {
    
        Member findByName(String name);
    
        Page<Member> findByName(String name, Pageable pageable);
    }
반응형