1. Querydsl Extension
- Spring Data JPA 모듈과 통합
QuerydslPredicateExecutor
public interface QuerydslPredicateExecutor<T> {
Optional<T> findOne(Predicate predicate);
Iterable<T> findAll(Predicate predicate);
long count(Predicate predicate);
boolean exists(Predicate predicate);
// … more functionality omitted.
}
- 조건에 대한 동적 쿼리 생성
예제
더보기
interface UserRepository extends JpaRepository<User, Long>, QuerydslPredicateExecutor<User> {
}
QUser user = QUser.user;
Predicate predicate = user.firstname.equalsIgnoreCase("dave")
.and(user.lastname.startsWithIgnoreCase("mathews"));
Iterable<User> users = userRepository.findAll(predicate);
2. Querydsl Web Support
@QuerydslPredicate
- 메서드 파라미터에 Querydsl Predicate를 자동으로 바인딩하는 데 사용
예시
더보기
/person?firstname=Dave&lastname=Matthews
@Controller
class UserController {
@Autowired
UserRepository repository;
@RequestMapping(value = "/", method = RequestMethod.GET)
String index(Model model, @QuerydslPredicate(root = User.class) Predicate predicate,
Pageable pageable, @RequestParam MultiValueMap<String, String> parameters) {
model.addAttribute("users", repository.findAll(predicate, pageable));
return "index";
}
}
QPerson person = QPerson.person;
Predicate predicate = person.firstname.eq("Dave").and(person.lastname.eq("Matthews"));
QuerydslPredicateArgumentResolver
- 요청 쿼리 문자열을 Predicate로 변환
셋팅
더보기
@Configuration
@EnableSpringDataWebSupport
public class QuerydslConfig { ... }
- @EnableSpringDataWebSupport
- Spring Data 웹 기능을 활성화
- 웹 요청에서 Pageable, Sort, Predicate 등의 객체를 자동으로 바인딩
QuerydslBinderCustomizerDefaults
- 기본 Querydsl 바인딩 설정
예제
더보기
@Configuration
@EnableSpringDataWebSupport
public class QuerydslConfig implements QuerydslBinderCustomizerDefaults {
@Override
public void customize(QuerydslBindings bindings, QPerson person) {
bindings.bind(person.firstname).first((path, value) -> path.containsIgnoreCase(value));
bindings.bind(person.lastname).first((path, value) -> path.containsIgnoreCase(value));
}
}
QuerydslBinderCustomizer
- 레포지토리별 Querydsl 바인딩 커스터마이징
예제
더보기
public interface UserRepository extends CrudRepository<User, Long>,
QuerydslPredicateExecutor<User>,
QuerydslBinderCustomizer<QUser> {
@Override
default void customize(QuerydslBindings bindings, QUser user) {
// username 속성에 대한 기본 바인딩 설정
bindings.bind(user.username).first((path, value) -> path.contains(value));
// 모든 String 속성에 대한 기본 바인딩 설정 (대소문자 구분 없음)
bindings.bind(String.class).first((StringPath path, String value) -> path.containsIgnoreCase(value));
// 특정 속성 제외
bindings.excluding(user.password);
}
}
- QuerydslBindings: Predicate으로 변환될 바인딩 규칙 정의
출처
'Spring > Spring Data JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 10-1. 객체지향 쿼리 언어: JPQL (0) | 2025.04.24 |
---|---|
[Spring Data JPA] 3-4. Specifications (0) | 2024.08.03 |
[Spring Data JPA] 3-3. Custom Repository Implementations (0) | 2024.08.02 |
[Spring Data JPA] 3-2. JPA Query Methods (4) (0) | 2024.08.02 |
[Spring Data JPA] 3-2. JPA Query Methods (6) (0) | 2024.08.02 |