如何从表中获取与Spring Data中的多个参数匹配的所有行?

时间:2017-11-16 14:43:47

标签: java spring spring-mvc spring-data

我正在使用Java,Spring Boot和PostgreSQL 现在我正在尝试从网站发送带有多个参数的请求表单,在数据库中搜索与这些参数匹配的行。

喜欢那个

http://localhost:8080/search?vtitle=&vcompany=Epam&vcity=Kiev&vlanguage=Java

我已经想出如何获得如此可靠的查询,但是存在问题。

List<JobSite> allJobs = jobRepository.findByTitleContainingAndCompanyAndCityAndLanguage(searchForm.getVtitle(),
            searchForm.getVcompany(),
            searchForm.getVcity(),
            searchForm.getVlanguage());

    allJobs.sort(Comparator.comparing(JobSite::getTime).reversed());
    model.addAttribute("jobs", allJobs);
    return "index";

如果我不选择其中一个参数,它将不会查询此行,因为findBy ...方法的工作方式。

如果我将代码改为

public String submit(@RequestParam MultiValueMap<String, String> params, Model model) {

我会得到一些自由。但即便如此,我找不到像“

”那样“自动生成”查询的方法
SELECT * FROM table WHERE title = 1 AND company = 1 AND city = 1 AND language = 1 
SELECT * FROM table WHERE company = 1 AND city = 1 AND language = 1 
SELECT * FROM table WHERE city = 1 AND language = 1 
SELECT * FROM table WHERE language = 1 
SELECT * FROM table WHERE title = 1 AND city = 1 AND language = 1 

等等。

如果我自己用Spring编写代码,它将变得一团糟。

从网站进行此类搜索的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用Spring Data JPA规范。这有点棘手,请参考这些链接,你会有一个想法

1。 Spring Data JPA Specifications

  1. advanced-spring-data-jpa-specifications