JPA13 Data Jpa 페이징 오늘은 Spring Data JPA에서 제공하는 페이징에 대해 복습한다. 내가 JPA를 공부하면서 가장 기억에남는 기능이 페이징관련한 인터페이스였다. 취업준비를 하면서 실무에서까지 리스트 페이징을 위해선 항상 공식화된 방법으로 클래스를 구성하고 쿼리를 짰던 것 같다. Data JPA에서 제공하는 페이징인터페이스를 사용하면 비즈니스로직에 필요한 쿼리만 정의하면 알아서 페이징 처리를 해주기 때문에 개발 향상성이 폭발적으로 증대되는것 같다. 예제를 구성해보았다. Order 와 Delivery에서 연관관계는 1:1이다 오더엔티티를 기준으로 left join 하였으며 order_id를 기준으로 내림차순 정렬한다. 이 쿼리를 페이징하기위해선 Pageable을 인자로 받고 Page로 래핑해서 리턴하면된다. 그러면 자.. 2023. 10. 12. Data JPA 반환타입 Spring Data JPA 반환 타입에 따른 결과 조회 결과가 많거나 없으면? 컬렉션 결과 없음: 빈 컬렉션 반환 단건 조회 결과 없음: null 반환 결과가 2건 이상: javax.persistence.NonUniqueResultException 예외 발생 참고: 단건으로 지정한 메서드를 호출하면 스프링 데이터 JPA는 내부에서 JPQL의 Query.getSingleResult() 메서드를 호출한다. 이 메서드를 호출했을 때 조회 결과가 없으면 javax.persistence.NoResultException 예외가 발생하는데 개발자 입장에서 다루기가 상당히 불편하다. 스프링 데이터 JPA는 단건을 조회할 때 이 예외가 발생하면 예외를 무시하고 대신에 null 을 반환한다. 2023. 10. 11. Data JPA collection 파라미터 바인딩 이번 글은 @Query 어노테이션을 이용한 쿼리메소드에 일반 변수가 아닌 리스트 변수를 파라미터로 바인딩하는 방법이다. 이론적으로 중요한 부분은 아니지만 그냥 까먹을때 보면 좋을 거 같아서 짧게 적어둔다. @Query("select m from Member m where m.name in :names") List findByNames(@Param("names") List names); in절에 들어갈 값들을 리스트로 바인딩한다 파라미터타입이 리스트고 나머진 일반 변수 바인딩이랑 다를게 없다. 호출하는 부분에서 @GetMapping("collectionParamBindingTest") public List collectionParamBindingTest(){ return memberDataJpaReposi.. 2023. 10. 11. @Query 값, DTO로 반환받기 @Query 어노테이션을 이용해서 엔티티 뿐만아니라 단일값과 DTO형태로도 리턴받을 수 있다. 다음예제를 보자 먼저 단일값으로 리턴받는 경우이다. @Query("select m.name from Member m where m.id= :id") String findByIdValue(@Param("id")Long id); 먼저 JPARepository를 상속받는 인터페이스에 구현한다. 사용할 컬럼을 셀렉트에서 명시하면되서 단순하다. @GetMapping("queryMethodValueTest") public String queryMethodValueTest(Long id){ return memberDataJpaRepository.findByIdValue(id); } 해당 메소드를 호출하는 컨트롤러에서 호출하.. 2023. 10. 11. 이전 1 2 3 4 다음