선택적 필터 기준을 사용하는 동적 Spring 데이터 JPA 저장소 쿼리
문제:
Spring의 경우 선택적 필터 기준을 사용하여 동적 쿼리를 생성하는 데이터 JPA는 필드 수가 많아지면 어려워집니다. 증가하여 수동으로 작성해야 하는 정적 쿼리 수가 많아집니다.
최상의 접근 방식: 사양 및 기준 API
Spring Data JPA는 사양 인터페이스를 제공하고 이 문제를 해결하기 위한 기준 API입니다. 사양을 사용하면 쿼리를 작성하는 데 동적으로 결합하고 사용할 수 있는 조건자를 프로그래밍 방식으로 생성할 수 있습니다.
사양 구현
사양을 사용하려면 JpaSpecificationExecutor로 저장소 인터페이스를 확장하세요. 인터페이스:
public interface EmployeeRepository extends JpaRepository<Employee, Integer>, JpaSpecificationExecutor<Employee> {}
만들기 사양
각 필터 기준에 대한 조건자 논리를 정의하여 사양 인터페이스를 구현하는 Java 클래스를 생성합니다. 예를 들어 EmployeeNumber 필드에 대한 사양을 생성하려면:
public class EmployeeNumberSpecification implements Specification<Employee> { private String employeeNumber; public EmployeeNumberSpecification(String employeeNumber) { this.employeeNumber = employeeNumber; } @Override public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> query, CriteriaBuilder builder) { if (employeeNumber == null || employeeNumber.isEmpty()) { return builder.disjunction(); // Allow any value } return builder.like(root.get("employeeNumber"), "%" + employeeNumber + "%"); } }
사양 결합
논리 연산자(예: and, or, 아님) 더 복잡한 검색 기준을 생성합니다. 예를 들어, 특정 EmployeeNumber 및 직업을 가진 직원을 검색하려면:
Specification<Employee> employeeNumberSpec = new EmployeeNumberSpecification("10"); Specification<Employee> professionSpec = new ProfessionSpecification("IT"); Specification<Employee> combinedSpec = Specification.where(employeeNumberSpec).and(professionSpec);
쿼리 실행
사양은 JPA의 findAll 및 기타 메소드와 함께 사용할 수 있습니다. 동적을 실행할 저장소 쿼리:
List<Employee> employees = employeeRepository.findAll(combinedSpec);
사양의 이점:
위 내용은 선택적 필터 기준을 사용하여 동적 Spring 데이터 JPA 쿼리를 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!