, вероятно, самый простой способ - использовать соглашение об именах и использовать findAllByTypeIn
:
interface UserRepository extends JpaRepository<User, Integer> {
Page<User> findAllByTypeIn(Pageable page,String... types));
}
, но если у вас более сложные критерии поиска, я бы рассмотрел использование спецификаций
Spring Data JPA поддерживает спецификации, вы можете расширить интерфейс репозитория с помощью интерфейса JpaSpecificationExecutor
следующим образом:
interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {
}
Напишите свою спецификацию
class UserSpecs {
public static Specification<User> isOfType(String type) {
return new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
return builder.equal(root.get("type"), type);
}
};
}
public static Specification<User> isInTypes(String... types) {
return new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
In<String> inClause = builder.in(root.get("type"));
for (String type: types) {
inClause.value(type);
}
return inClause;
}
};
}
}
и получите результатчерез
dao.findAll(UserSpecs.isOfType("admin").or(UserSpecs.isOfType("super_admin")) ,PageRequest.of(page, size));
или если вы предпочитаете использовать в
dao.findAll(UserSpecs.isInTypes("admin","super_admin")) ,PageRequest.of(page, size));