Skorzystaj z Predicate expressions:
https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html
https://docs.spring.io/spring-data/jpa/docs/1.5.x/api/org/springframework/data/jpa/domain/Specifications.html
dostępnych dla choćby pracy ze strumieniami.
Predykaty pozwolą Ci dynamicznie utworzyć zapytanie na podstawie wprowadzonych kryteriów. Na przykład, używając biblioteki takiej jak Spring Data JPA, która udostępnia interfejs JpaSpecificationExecutor, możesz wykorzystać specyfikacje, czyli funkcje, na podstawie których określisz jakie rekordy powinny być zwrócone przez zapytanie.
public interface CarRepository extends JpaRepository<Car, Integer>, JpaSpecificationExecutor<Car> {}
// osobno utworzyć
public class CarSpecifications {
public static Specification<Car> averageSpeedBetween(Double minSpeed, Double maxSpeed) {
return (root, query, cb) -> {
Expression<Double> averageSpeed = cb.function("averageSpeed", Double.class, root.get("id"));
return cb.between(averageSpeed, minSpeed, maxSpeed);
};
}
}