2017-10-09 85 views
0

我想创建一个表单,根据表单输入为我生成sql查询。使用Spring数据JPA,如何创建一个过滤器表单的动态查询

例如,我有一张表People [id,name,age]和一个带有两个字段的表格: 名称和年龄。

如果所有的两个字段的形式完成,查询将是这样的:

List<People> findByNamendAge(String name, Int age); 

但是,如果只有名称被填满,我想告诉所有对应的人,只是这个名字,尽管年龄是空白的。

(当然,在这个例子中,我可以创建一个findByName(String name)finByAge(Int age),如果/人会做一个简单的,但我真正的问题envolves含有大量的输入滤波器)

+0

我想你看看做查询的例子。 Spring数据有[此模块](https://github.com/spring-projects/spring-data-examples/tree/master/jpa/query-by-example)。 –

+1

你应该看看如何使用QueryDSL扩展的Spring数据请参阅:https://stackoverflow.com/questions/26449410/what-is-the-best-solution-for-filtering-results-in-spring-data-jpa- with-many-pro/26450224#26450224和https://stackoverflow.com/a/33647084/1356423 –

回答

2

你应该使用JPA CriteriaAPI。你可以在这里找到一个例子:

Conditional where clause in JPA criteria query

+0

是的,我听说过CriteriaAPI,但我试图避免大量if/else这种方法将需要。 –

+0

@布鲁诺吉斯,你为什么会这样想?只需使用模型字段进行表单字段的1to1链接,即可确切知道哪个字段填充了值。 –

+0

@ M.Prokhorov对不起,但是要小心解释一下,表单字段与模型字段的1to1链接意味着什么?从来没有听说过这种方法 –

相关问题