Реализовать функции поиска и фильтрации для загрузки Spring - PullRequest
1 голос
/ 22 января 2020

Я создаю приложение при весенней загрузке, используя базу данных postgress.

Я хочу реализовать функцию поиска по заголовку и фильтрации по категориям статей, но я не знаю, с чего начать. На данный момент приложение позволяет отображать все результаты таблицы.

С чего начать? Заранее благодарю за помощь и за все комментарии.

Модель:

@Entity(name="articles")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Articles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long article_id;
private String title;
private String issn;
private String eissn;
private String title2;
private String issn2;
private String eissn2;
private Integer points;

@ManyToMany
@JoinTable(
        name = "articles_categories",
        joinColumns = @JoinColumn(name = "article_id"),
        inverseJoinColumns = @JoinColumn(name = "category_id"))
private List<Category> categories;

public Long getArticle_id() {
    return article_id;
}

public void setArticle_id(Long article_id) {
    this.article_id = article_id;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getIssn() {
    return issn;
}

public void setIssn(String issn) {
    this.issn = issn;
}

public String getEissn() {
    return eissn;
}

public void setEissn(String eissn) {
    this.eissn = eissn;
}

public String getTitle2() {
    return title2;
}

public void setTitle2(String title2) {
    this.title2 = title2;
}

public String getIssn2() {
    return issn2;
}

public void setIssn2(String issn2) {
    this.issn2 = issn2;
}

public String getEissn2() {
    return eissn2;
}

public void setEissn2(String eissn2) {
    this.eissn2 = eissn2;
}

public Integer getPoints() {
    return points;
}

public void setPoints(Integer points) {
    this.points = points;
}

public List<Category> getCategories() {
    return categories;
}

public void setCategories(List<Category> categories) {
    this.categories = categories;
}

public Articles(){

}}

Репозиторий:

public interface ArticlesRepository extends JpaRepository<Articles,Long> {
}

Контроллер:

@Controller
@RequestMapping("/articles")
public class ArticlesController {


private ArticleService articleService;

@Autowired
public void setArticleService(ArticleService articleService) {
    this.articleService = articleService;
}

@GetMapping 
public String getAll(Model model)
{
    model.addAttribute("articles", articleService.list());
    return "articles"; 
}

Сервис:

@Service
public class ArticleService {


@Autowired
private ArticlesRepository articlesRepository;

public ArticleService() {
}

public List<Articles> list(){
    return articlesRepository.findAll();
}}

1 Ответ

1 голос
/ 22 января 2020

Используйте спецификации , JpaSpecificationExecutor для фильтрации / поиска ваших статей,

Respoitory ,

interface ArticlesRepository extends JpaRepository<Articles, Long>, JpaSpecificationExecutor<Articles> {   
}

Метод контроллера ,

@GetMapping
public List<Articles> list(@RequestParam int size, @RequestParam int page, @RequestParam string search, Model model){     
    Page<Articles> pageableArticales = articlesRepository.findAll(searchArticleSpecification(search), PageRequest.of(page, limit);
    return pageableArticales.getContent();
}}

Примечание: научитесь создавать спецификации и написать метод searchArticleSpecification(search), который предоставит вам Specification<Articles> на основе вашей логики поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...