사용자 정의 쿼리 DSL (여기서 내가 봄 데이터 MongoDB를 사용하고 중요한) 바인딩 - 비교보다 큰
당신이 QueryDslPredicateExecutor
및 QuerydslBinderCustomizer
확장하여 자신의 QueryDSL, 당신의 저장소에 바인딩 정의되어 수행 할 수 있습니다
public interface FooRepository
extends CrudRepository<Foo, Integer>, QueryDslPredicateExecutor<Foo>, QuerydslBinderCustomizer<QFoo> {
default void customize(final QuerydslBindings bindings, final QFoo foo) {
SingleValueBinding<NumberPath<Integer>, Integer> singleBinding = new SingleValueBinding<NumberPath<Integer>,Integer>(){
@Override
public Predicate bind(NumberPath<Integer> path, Integer ageValue) {
return path.gt(ageValue);
}
};
bindings.bind(foo.age).first(singleBinding);
}
}
내가 어떤 쿼리 DSL 전문가는 아니지만을하지만 나의 이해는 다음과 같다 :
을 바인딩은 특정 필드를 데이터베이스 열과 비교하는 방법을 정의합니다.
자바 8의 동일한 바인딩 : lambda : (path, ageValue) -> path.gt(ageValue)
. 당신은 url 매개 변수의 관점에서 사용자 정의 방식의 코드를 읽을 수 있습니다
가 매개 변수로 제공되는 연령보다 큰 데이터베이스의 가치 인을위한, FOOS를 가져옵니다.
사용자 정의 쿼리 DSL 바인딩 - 비교 사이
또 다른 옵션은 다음과 같이 낮은과 매개 변수에 대한 상한을 제공하는 것입니다 : ?age=10&age=30
. 그런 다음 다음 바인딩을 정의하십시오.
default void customize(final QuerydslBindings bindings, final QFoo foo) {
bindings.bind(foo.age).all((path, ageValue) -> {
Iterator<? extends Long> it = value.iterator();
return path.between(it.next(), it.next());
});
}
이것을 구현하는 방법을 찾았습니까?비슷한 것을 구현하려고했지만 성공하지 못했습니다. – woemler
@woemler 나는 실제로 그 문제를 지금까지 주차했지만 멀리 가지 않을 것입니다. 나는 쿼리 매개 변수를 파싱하기 위해 내 자신의 코드를 작성하게 될 것이라고 생각한다. 스프링 주입 메커니즘과 쉽게 통합 할 수 있는지 확인해야합니다. 그렇게 할 때 스프링 github 저장소에 대한 조언을 요청할 것입니다. 흥미로운 것을 발견하면 대답으로 쓰겠습니다. – phoenix7360