Java 使用SpringDataJPA,如何为过滤器表单创建动态查询

Java 使用SpringDataJPA,如何为过滤器表单创建动态查询,java,spring,hibernate,spring-data,spring-data-jpa,Java,Spring,Hibernate,Spring Data,Spring Data Jpa,我想创建一个表单,它将根据表单输入为我生成sql查询 例如,我有一个表People[id,name,age],还有一个带有两个字段的表单: 姓名和年龄 如果表单上的所有两个字段都已完成,则查询将如下所示: List<People> findByNamendAge(String name, Int age); List findByNamendAge(字符串名,Int-age); 但是如果只填了姓名,我想显示所有与姓名对应的人,即使年龄留空 (当然,在这个例子中,我可以创建一个f

我想创建一个表单,它将根据表单输入为我生成sql查询

例如,我有一个表People[id,name,age],还有一个带有两个字段的表单: 姓名和年龄

如果表单上的所有两个字段都已完成,则查询将如下所示:

 List<People> findByNamendAge(String name, Int age);
List findByNamendAge(字符串名,Int-age);
但是如果只填了姓名,我想显示所有与姓名对应的人,即使年龄留空


(当然,在这个例子中,我可以创建一个
findByName(字符串名)
和一个
finByAge(Int-age)
,一个简单的if/else就可以了,但我真正的问题是一个包含大量输入的过滤器)

您应该使用JPA CriteriaAPI来实现这一点。您可以在此处找到一个示例:


您应该使用JPA标准API来实现这一点。您可以在此处找到一个示例:


是的,我听说过CriteriaAPI,但我试图避免这种方法需要大量的if/else。@BrunoGois,你认为为什么会这样?只需将表单字段与模型字段进行1到1的链接,这样您就可以确切地知道哪个字段中填充了值。@M.Prokhorov对不起,但您是否愿意确切地解释表单字段与模型字段的1到1链接的含义?从没听说过这个approach@BrunoGois,可以通过多种方式生成映射。更常见的一种是声明“属性”的
JavaBeans
规范。例如,
Person
具有属性“Age”(通过
getAge()
在bean上访问),表单字段具有“Age”字段。只要标题为“名称”的表单上没有其他字段,这就是1对1。你可以这样建立你的标准。是的,我听说过CriteriaAPI,但我试图避免这种方法需要大量的if/else。@BrunoGois,你认为为什么会这样?只需将表单字段与模型字段进行1到1的链接,这样您就可以确切地知道哪个字段中填充了值。@M.Prokhorov对不起,但您是否愿意确切地解释表单字段与模型字段的1到1链接的含义?从没听说过这个approach@BrunoGois,可以通过多种方式生成映射。更常见的一种是声明“属性”的
JavaBeans
规范。例如,
Person
具有属性“Age”(通过
getAge()
在bean上访问),表单字段具有“Age”字段。只要标题为“名称”的表单上没有其他字段,这就是1对1。你可以这样建立你的条件。我建议你通过例子来做查询。Spring数据已经有了。您应该看看对Spring数据使用QueryDSL扩展,请参阅:我建议您通过示例进行查询。Spring数据有。您应该看看如何使用QueryDSL扩展来处理Spring数据。请参阅:和