programing

Spring boot CrudRepository를 사용하여 데이터 필터링

bestprogram 2023. 6. 26. 21:32

Spring boot CrudRepository를 사용하여 데이터 필터링

스프링 부트로 데이터에 액세스하는 간단한 REST 서비스가 있습니다.CrudRepository.

이 리포지토리는 이미 다음과 같은 페이지 표시 및 정렬 기능을 구현했습니다.

public interface FlightRepository extends CrudRepository<Flight, Long> {
  List<Flight> findAll(Pageable pageable);
}

호칭:

Sort sort = new Sort(direction, ordering);
PageRequest page = new PageRequest(xoffset, xbase, sort);

return flightRepo.findAll(page);

이 저장소에도 필터링을 추가하고 싶습니다(예: 다음을 포함하는 엔티티만 반환).id > 13 AND id < 27CrudRepository는 이 기능을 지원하지 않는 것 같습니다.이를 달성하는 방법이 있습니까? 아니면 다른 접근 방식을 사용해야 합니까?

팁을 주셔서 감사합니다!

모든 매개 변수 조합에 대해 쿼리 메서드를 만들어야 하는 것에 대한 위의 설명에서 우려하는 사항을 해결할 수 있는 다른 방법은 Criteria API 또는 QueryDSL을 사용하여 사양 패턴을 사용하는 것입니다.

두 가지 접근 방식은 다음과 같은 우려에 대응하여 아래에 요약되어 있습니다.

쿼리가 고정된 기준 집합을 정의하기 때문에 대규모 응용 프로그램의 경우 쿼리 메소드의 수가 증가할 수 있습니다.이 두 가지 단점을 피하기 위해, 여러분이 동적으로 결합하여 쿼리를 작성할 수 있는 원자 술어 세트를 생각해 낸다면 멋지지 않을까요?

https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

QueryDSL을 사용하는 것이 조금 더 쉽다고 생각합니다.매개 변수의 조합을 술어로 전달할 수 있는 인터페이스 메서드를 하나만 정의하면 됩니다.

예.

public interface UserRepository extends PagingAndSortingRepository<User, Long>, QueryDslPredicateExecutor<User> {
    public List<User> findAll(Predicate predicate);
}

질문할 내용:

repository.findAll(QUser.user.address.town.eq("Glasgow").and(QUser.user.gender.eq(Gender.M)));

repository.findAll(QUser.user.address.town.eq("Edinburgh"));

repository.findAll(QUser.user.foreName.eq("Jim"));

여기서 QUser는 QueryDSL 자동 생성 클래스입니다.

http://docs.spring.io/spring-data/jpa/docs/current/api/index.html?org/springframework/data/jpa/repository/support/QueryDslRepositorySupport.html

http://www.querydsl.com/static/querydsl/2.1.0/reference/html/ch02s02.html

갱신하다

Spring Data 모듈의 Gosling 릴리스에서는 이제 웹 응용 프로그램의 HTTP 매개 변수에서 자동 술어 생성을 지원합니다.

https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling#querydsl-web-support

리포지토리에서 아래 함수를 선언합니다.[EDITED]

Page<Flight> findByIdBetween(Long start, Long end, Pageable pageable)

그런 다음 리포지토리 인스턴스에서 이 함수를 호출할 수 있습니다.자세한 내용은 스프링 데이터 참조를 참조하십시오.

언급URL : https://stackoverflow.com/questions/33646714/filtering-data-with-spring-boot-crudrepository