Spring boot jpa query select как сделать
Мне необходимо, в зависимости от того, чего хочет пользователь, фильтровать мои посты (типа в соц сетях) по title, authorId, tags, отсортировать по названию поля в классе, указать order и лимитировать кол-во постов для постраничного отображения. Пользователь в адресной строке вводит все эти параметры GET /articles?skp=...&limit=...&q=title&authorId=...&tags=tag1,tag2&order=desc&sorted=field_name , НО может и не водить вовсе, или ввести только некоторые из них. Мой контроллер выглядит так:
@GetMapping("/articles")
public List<Article> getAllPublicPosts(@RequestParam(name = "skip", required = false, defaultValue = "0") Long skip,
@RequestParam(name = "limit", required = false, defaultValue = "10") Long limit,
@RequestParam(name = "q", required = false, defaultValue = "") String postTitle,
@RequestParam(name = "author", required = false, defaultValue = "0") Long authorId,
@RequestParam(name = "sort", required = false, defaultValue = "none") String fieldName,
@RequestParam(name = "order", required = false, defaultValue = "asc") String order,
@RequestParam(name = "tags", required = false, defaultValue = "") String[] tags) {
return articleService.getAllPublicPosts(skip, limit, postTitle, authorId, fieldName, order, tags);
}
Я могу сделать все в коде, но для этого мне приходится доставать все значения в список. А что, если кол-во постов будет превышать Integer.MAX_VALUE? А что , если постов настолько много не будет, но по-прежнему много? Тогда код будет работать супер медленно
Важно в контроллере то, что есть дефолтные значения. Я бы хотела сделать такой @Query-select, чтобы, в случае чего, он бы игнорировал некоторые из @RequestParam, а точнее postTitle, authorId, fieldName, иначе при выборке он может мне ничего и не вернуть, но совсем не знаю как. И не знаю, возможно ли это в принципе. Если пилить для каждого случая отдельный метод в ArticleRepo, их станет слишком много