[Spring Boot] Spring Boot JPA 를 학습하기

김현수·2024년 5월 24일
0

spring

목록 보기
6/9


@ Spring Boot JPA 를 학습하기

  • JPA

    • Java 애플리케이션에서 관계형 데이터를
      관리하기 위한 프레임워크를 제공하는 고급 API

    • Repository 인터페이스에서 정의한 Method
      이름을 기반으로 쿼리를 자동으로 생성하는
      기능을 제공

    • Java Persistence API

    • 다양한 DB 에 대한 저장소 추상화를 제공

    • 데이터 액세스 계층 구현을 단순화하는 것을 목표

    • Spring Data 프로젝트의 일부

    • 데이터 지속성을 위해 JPA를 사용

    • Spring 기반 애플리케이션을 더 쉽게 구축



    • 기능

      • CRUD 작업
        • 기본 생성, 읽기, 업데이트 및 삭제 작업이 자동으로 제공
      • 사용자 정의 쿼리
        • 메서드 이름 또는 @Query 주석을 사용하여 사용자 정의 쿼리를 정의
      • 페이지 매김 및 정렬
        • 쿼리에 페이지 매김 및 정렬을 쉽게 추가
      • 감사
        • 생성 및 수정 타임스탬프를 자동 추적
      • 거래 관리
        • @Transactional 을 사용한 자동 거래 관리
      • 지연 로드 및 가져오기 전략
        • JPA 주석을 사용하여 데이터를 가져오는 방법 제어
      • 예상
        • DB 에서 특정 필드만 검색
      • 사양
        • 복잡한 쿼리를 동적 생성


    • 자동으로 생성하는 네이밍 규칙

      • findBy

        • 필드를 기반으로 Entity 찾기
      • countBy

        • 필드를 기준으로 Entity 수 계산
      • existsBy

        • 필드를 기반으로 Entity 존재 확인
      • deleteBy

        • 필드를 기준으로 Entity 삭제


    • 페이지 매김 및 정렬 사용

      • 즉시 페이지 매김 및 정렬을 지원
      • Pageable 및 Sort 인터페이스를 사용
      • Page<Employee> findAll(Pageable pageable);


🖋️ JPA 를 사용하는 이유?

  • 생산성
    • 상용구 코드를 줄이고 자동 쿼리 생성으로 생산성 높이기

  • 유지관리성
    • 특히 DB Schema 가 변경된 경우 코드를
      관리하고 업데이트하기 더 쉬움

  • 확장성
    • 캐싱 및 성능 최적화와 같은 기능 제공

  • 일관성
    • 데이터 액세스에 대한 표준화된 접근 방식을 사용
    • APP 전반에 걸쳐 일관성 보장

  • JDBC 에 비해 DB 상호작용을 위한 더 높은 수준의 추상화



EXAMPLE

public interface SpringDataJpaEmployeeRepository 
   extends JpaRepository<Employee, Long>, EmployeeRepository {

    // Find employees by first name and last name
    List<Employee> findByFirstNameAndLastName(String firstName, String lastName);

    // Count employees by department
    long countByDepartment(String department);

    // Check if an employee exists by email
    boolean existsByEmail(String email);

    // Delete employees by department
    void deleteByDepartment(String department);
    
    @Query("SELECT e FROM Employee e WHERE e.lastName = :lastName")
    List<Employee> findByLastName(@Param("lastName") String lastName);
    
    // Find all employees with pagination
    Page<Employee> findAll(Pageable pageable);
    
    // Find employees by department with sorting
    List<Employee> findByDepartment(String department, Sort sort);
}
profile
일단 한다

0개의 댓글