1. Querydsl Extension
- Spring Data JPA 모듈과 통합
QuerydslPredicateExecutor
- 조건에 대한 동적 쿼리 생성
public interface QuerydslPredicateExecutor<T> {
Optional<T> findById(Predicate predicate);
Iterable<T> findAll(Predicate predicate);
long count(Predicate predicate);
boolean exists(Predicate predicate);
// … more functionality omitted.
}
Definition
interface UserRepository extends JpaRepository<User, Long>, QuerydslPredicateExecutor<User> {
}
Use
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
QuerydslPredicateArgumentResolver
- 요청 쿼리 문자열에서 Predicate로 변환
?firstname=Dave&lastname=Matthews
Setting
- @EnableSpringDataWebSupport
- QuerydslBinderCustomizerDefaults: 기본 Querydsl 바인딩 설정
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으로 변환될) 바인딩 규칙 정의
@QuerydslPredicate
- 준비된 Predicate 제공 (method signature)
@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";
}
}
출처
'Spring > Spring Data JPA' 카테고리의 다른 글
[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 |
[Spring Data JPA] 3-2. JPA Query Methods (3) (0) | 2024.08.02 |