복붙노트

[SPRING] Spring Data JPA는 내부적으로 어떻게 작동합니까?

SPRING

Spring Data JPA는 내부적으로 어떻게 작동합니까?

스프링 데이터 JPA 튜토리얼을 살펴 보았습니다. 이 프레임 워크가 내부적으로 어떻게 작동하는지 혼란 스럽습니다. 나에게 구체적인 시나리오를 알려주기 바란다.

특정 코드가 있습니다.

/**
 * Custom finder
 */
public List<Location> getLocationByStateName(String name) {
    @SuppressWarnings("unchecked")
    List<Location> locs = entityManager
        .createQuery("select l from Location l where l.state like :state")
        .setParameter("state", name + "%").getResultList(); // note
        return locs;
}

이것은 단순히 다음 인터페이스로 대체되었습니다.

@Repository
public interface LocationJPARepository extends JpaRepository<Location, Long> {
    List<Location> findByStateLike(String stateName);
}

그리고 해당 테스트 케이스가 잘 작동했습니다.

@Test
public void testFindWithLike() throws Exception {
   List<Location> locs = locationRepository.getLocationByStateName("New");
   assertEquals(4, locs.size());
}

새로운 테스트 케이스

@Test
public void testFindWithLike() throws Exception {
   List<Location> locs = locationJPARepository.findByStateLike("New");
   assertEquals(4, locs.size());
}

내 질문

희망을 제대로 설명 할 수 있었기를 바랍니다. 더 명확하게 추가해야하는지 알려주세요.

해결법

  1. ==============================

    1.참조 가이드의 쿼리 작성 섹션을 살펴 보는 것이 좋습니다. 규칙을 아주 분명하게 설명합니다.

    참조 가이드의 쿼리 작성 섹션을 살펴 보는 것이 좋습니다. 규칙을 아주 분명하게 설명합니다.

    예를 들어 이름으로 사용자를 찾고 대소 문자를 무시하려는 경우 findByFirstnameIgnoreCase와 같은 메서드 이름을 사용하면 UPPER (x.firstame) = UPPER (? 1)와 같은 조건으로 변환됩니다.

    기본적으로 findByProperty 메소드가있을 때 일치가 정확하므로 LIKE 기능을 원하면 메소드 이름 findByFirstnameLike를 사용하면 x.firstname이? 1과 같은 조건으로 변환됩니다.

    이 키워드들을 결합 할 수는 있지만 약간 미칠 수 있습니다. 개인적으로는 매우 긴 저장소 메서드 이름을 피하기 위해 더 복잡한 쿼리에 @Query 주석을 사용하는 것을 선호합니다.

  2. from https://stackoverflow.com/questions/32679406/how-does-spring-data-jpa-work-internally by cc-by-sa and MIT license