[Spring] JPA In 절 사용하기

    [Spring] JPA In 절 사용방법 알아보기

    Spring JPA에서 IN절은 여러 개의 값으로 쿼리를 작성하는 방법입니다. IN절을 사용하여 복수 개의 값으로 필터링할 수 있으며, JPQL, Native Query 및 QueryDSL에서 모두 사용할 수 있습니다.

    아래 3가지 방법으로 Spring JPA In절 사용방법을 알아보겠습니다.

    1. JPQL에서 In절 사용하기

    JPQL에서 IN절을 사용하여 쿼리를 작성하는 방법은 다음과 같습니다. 예를 들어, Customer 엔티티 클래스가 있다고 가정해 봅시다.

    @Entity
    public class Customer {
        @Id
        private Long id;
    
        private String firstName;
        private String lastName;
        private String email;
        
        // getter, setter, constructor
    }

    JPQL에서 IN절을 사용하여 이름이 "John" 또는 "Jane"인 고객을 검색하는 쿼리를 작성해보겠습니다.

    @Repository
    public interface CustomerRepository extends JpaRepository<Customer, Long> {
        @Query("SELECT c FROM Customer c WHERE c.firstName IN :names")
        List<Customer> findCustomersByNames(@Param("names") List<String> names);
    }

    위의 예제에서, :names는 IN절의 파라미터 이름입니다. 쿼리 실행시에 "John" 및 "Jane"을 포함하는 리스트를 전달하면 됩니다.

    2. NativeQuery In절 사용하기

    Native Query에서 IN절을 사용하여 쿼리를 작성하는 방법은 다음과 같습니다. 예를 들어, Customer 엔티티 클래스에서 Native Query로 이름이 "John" 또는 "Jane"인 고객을 검색하는 쿼리를 작성해보겠습니다.

    @Repository
    public interface CustomerRepository extends JpaRepository<Customer, Long> {
        @Query(value = "SELECT * FROM customers WHERE first_name IN ?1", nativeQuery = true)
        List<Customer> findCustomersByNames(List<String> names);
    }

    위의 예제에서 ?1은 IN절의 첫 번째 파라미터입니다. 쿼리 실행시에 "John" 및 "Jane"을 포함하는 리스트를 전달하면 됩니다.

    3. QueryDSL In절 사용하기

    QueryDSL에서 IN절을 사용하여 쿼리를 작성하는 방법은 다음과 같습니다. 예를 들어, Customer 엔티티 클래스에서 QueryDSL로 이름이 "John" 또는 "Jane"인 고객을 검색하는 쿼리를 작성해보겠습니다.

    @Repository
    public interface CustomerRepository extends JpaRepository<Customer, Long>, QuerydslPredicateExecutor<Customer> {
        default List<Customer> findCustomersByNames(List<String> names) {
            JPAQuery<Customer> query = new JPAQuery<>(this.getEntityManager());
            QCustomer customer = QCustomer.customer;
    
            return query.from(customer).where(customer.firstName.in(names)).fetch();
        }
    }

    위의 예제에서, QueryDSL에서 IN절을 사용하여 firstName 필드가 names 리스트에 포함된 경우에만 검색하도록 작성했습니다. 이 방법은 JPQL, 네이티브 쿼리 및 QueryDSL에서 모두 사용할 수 있습니다.

    4. 총정리

    Spring JPA에서 IN절을 사용하여 쿼리를 작성하는 방법은 매우 간단합니다. JPQL, 네이티브 쿼리 및 QueryDSL에서 모두 사용할 수 있으며, 각 방법에 따라 작성 방법이 조금씩 다를 수 있습니다. 이러한 방법을 잘 활용하면, 빠르고 효율적인 데이터베이스 쿼리를 작성할 수 있으며, 개발 생산성을 높일 수 있습니다.

    댓글

    Designed by JB FACTORY