[Spring] JPA(Java Persistence API)와 Spring Data JPA

류넹·2024년 3월 19일
1

Spring

목록 보기
37/50

❓ JPA(Java Persistence API)

  • 자바의 표준 데이터베이스 액세스 API
  • ORM(Object-Relational Mapping, 객체-관계 매핑)을 이용한 데이터베이스 액세스 API
  • JPA의 대표적인 구현체 : Hibernate(하이버네이트) 프레임워크

✔️ ORM

  • 객체와 관계형 데이터베이스의 테이블을 매핑하여 데이터베이스 액세스를 지원하는 기술
  • SQL을 직접 작성해서 데이터베이스 액세스를 수행하는 대신, 자바 객체를 사용해서 데이터베이스의 데이터에 대한 CRUD 작업을 처리할 수 있다.
  • 데이터베이스 액세스 작업을 객체 지향적인 코드로 수행가능하다.
  • 개발자는 직접적인 SQL 쿼리 작성 없이 데이터베이스 액세스 작업을 수행할 수 있기 때문에 개발과정이 단순해지고, 코드의 가독성이 높아진다.
  • 데이터베이스와 애플리케이션 코드 간의 중간 계층 역할을 수행하기 때문에 데이터베이스가 변경되더라도 애플리케이션 코드를 변경할 필요가 없다.


❔ 참고) mybatis

  • SQL 매퍼 프레임워크
  • SQL-객체 매핑을 이용한 데이터베이스 액세스를 지원하는 구현체





📌 Spring Data와 Spring Data JPA

1. Spring Data

  • 데이터베이스 액세스에 대한 추상화를 지원하는 프로젝트
  • 데이터베이스와 관련된 다양한 하위 프로젝트를 가지고 있다.

➖ Spring Data의 주요 API

1. interface Repository<T, ID>

  • 마크업 인터페이스
  • 모든 데이터베이스 액세스를 수행하는 구현체는 이 인터페이스를 구현한다.

2. interface CrudRepository<T, ID> extends Repository<T, ID>

  • CRUD 작업에 대한 추상화를 지원하는 인터페이스
  • 주요 메소드
    • <S extends T> S save(S entity)
      • 지정된 entity객체를 저장한다.

    • Optional<T> findById(ID id)
      • 지정된 id로 데이터를 조회한다.

    • boolean existsById(ID id)
      • 지정된 id에 해당하는 데이터가 존재하면 true를 반환한다.

    • Iterable<T> findAll()
      • 모든 데이터를 조회한다.

    • long count()
      • 데이터의 총 갯수를 반환한다.

    • void deleteById(ID id)
      • 지정된 아이디에 해당하는 데이터를 삭제한다.

    • void delete(T entity)
      • 지정된 entity에 해당하는 데이터를 삭제한다.

    • void deleteAll()
      • 모든 데이터를 삭제한다.

3. interface PagingAndSortingRepository<T, ID>

  • 페이징처리와 정렬 작업에 대한 추상화를 지원하는 인터페이스
  • 주요 메소드
    • Iterable<T> findAll(Sort sort)
      • 데이터를 지정된 sort객체의 조건에 맞게 정렬해서 조회한다.

    • Page<T> findAll(Pageable pageable)
      • 데이터를 지정된 pageable객체의 조건에 맞게 페이징처리해서 조회한다.


2. Spring Data JPA

  • Spring Data의 하위 프로젝트
  • Spring Data에서 Repository 인터페이스로 추상화한 데이터베이스 액세스를 JPA의 구현체인 Hibernate를 이용해서 구현했다.
  • 개발자는 자바 애플리케이션 구현 시,
    JPA의 API를 직접 사용하는 대신 Spring Data와 Spring Data JPA에서 추상화해둔 API를 이용해서 데이터베이스 액세스를 수행한다.
    JPA를 직접적으로 사용하지 않고, Spring Data JPA를 통해 간접적으로 사용

  • 결과적으로, JPA를 이용한 데이터베이스 액세스 작업을 보다 편리하게 사용할 수 있도록 지원한다.





💡 참고 이미지

profile
학습용 커스터마이징 간단 개발자 사전

0개의 댓글