JPA

mmmhmm·2024년 4월 18일
0
post-thumbnail

간단하게 스프링 부트에대해 설명하고 넘어가겠습니다.

  • 스프링 부트는 스프링 프레임워크 개발 도구라고 봐야할 것입니다.

  • 스프링 부트의 중요한 특징으로는 Auto Configuration(자동 설정)을 내세울 수 있습니다.

  • 또 다른 특징으로는 내장 톰캣과 단독 실행 가능한 도구라는 것 입니다.

🤔Spring Data JPA란?

Java Persistence API(JPA)라는 기술은 간단하게 '자바로 영속 영역을 처리하는 API' 라고 해석 할 수 있습니다.
JPA의 상위 개념은 ORM(Object Relational Mapping)이라는 패러다임으로 이어지는데 이는 '객체지향'으로 구성한 시스템을 '관계형 데이터베이스'에 매핑하는 패러다임입니다.

JPA는 스프링과 연동할 때 Spring Data JPA라는 라이브러리를 사용합니다. Spring Data JPA는 JPA를 단독으로 활용할 때 보다 더 적은 양의 코드로 많은 기능을 활용할 수 있다는 장점이 있습니다.

🤔 영속 영역?
JPA에서의 영속성은 엔티티를 영구적으로 저장해주는 환경을 의미합니다.

핵심개념

Spring Data repository 추상화의 중심 인터페이스는 다음과 같습니다.

public interface CrudRepository<T, ID> extends Repository<T, ID> {

  <S extends T> S save(S entity); 
// 1. 지정된 엔티티를 저장합니다.

  Optional<T> findById(ID primaryKey);
// 2. 지정된 ID로 식별된 엔티티를 반환합니다.
  Iterable<T> findAll();
// 3. 모든 엔티티를 반환합니다.
  long count();
// 4. 엔티티 수를 반환합니다.
  void delete(T entity);
// 5. 지정된 엔티티를 삭제합니다.
  boolean existsById(ID primaryKey);
// 6. 지정한 ID를 가진 엔티티가 존재하는지 여부를 나타냅니다.
  // … more functionality omitted.
}

이 인터페이스에 선언된 메서드들은 보통 CRUD 메서드로 불립니다.
ListCrudRepository는 해당 메서드들과 동일한 메서드들을 제공하지만, CrudRepository 메소드가 Iterable을 반환하는 List를 반환합니다.

또한 JpaRepository 또는 MongoRepository와 같은 지속성 기술별 추상화도 제공합니다. 이러한 인터페이스는 CrudRepository를 확장하고 CrudRepository와 같이 다소 일반적인 지속성 기술에 구애받지 않는 인터페이스 외에도 기본 지속성 기술의 기능을 노출합니다.

CrudRepository 외에도 엔터티에 대한 페이지 매김 액세스를 쉽게 하기 위해 추가 메서드를 추가하는 PagingAndSortingRepositoryListPagingAndSortingRepository가 있습니다.

public interface PagingAndSortingRepository<T, ID>  {

  Iterable<T> findAll(Sort sort);

  Page<T> findAll(Pageable pageable);
}

확장 인터페이스는 실제 저장소 모듈에서 지원될 수 있습니다. 이 문서에서는 일반적인 구성표를 설명하지만 저장소 모듈이 사용하려는 인터페이스를 지원하는지 확인하십시오.

User의 두 번째 페이지를 페이지 크기를 20으로 접근하려면 다음과 같이 할 수 있습니다:

PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(PageRequest.of(1, 20));

ListPagingAndSortingRepository는 유사한 메서드를 제공하지만, PagingAndSortingRepository의 메서드가 Iterable을 반환하는 반면 List를 반환합니다.

쿼리 메서드에 추가하여, countdelete 쿼리에 대한 쿼리 파생이 가능합니다. 다음 목록은 파생된 count 쿼리의 인터페이스 정의를 보여줍니다

interface UserRepository extends CrudRepository<User, Long> {

  long countByLastname(String lastname);
}

다음 목록은 파생된 삭제 쿼리의 인터페이스 정의를 보여줍니다

interface UserRepository extends CrudRepository<User, Long> {

  long deleteByLastname(String lastname);

  List<User> removeByLastname(String lastname);
}
profile
어라? 금지

0개의 댓글

관련 채용 정보