假设我有一个Employee
类,它有多个字段,比如name
,age
,salary
,designation
,joiningDate
,gender
等等,那么,我该如何使用这些参数进行过滤呢?(例如,如果我想有6个过滤器,那么总共可以有6!= 720个可能的组合!!!)
对于只有2、3个参数的情况,如age
、salary
、name
;那么我可以写多个if,比如:
if(age!=null && name==null && salary==null)
{
findByAge
}
if(age==null && name!=null && salary==null)
{
findByName
}
if(age!=null && name!=null && salary==null)
{
findByAgeAndName
}
在Spring Data JPA的帮助下,像这样的参数。但是如何处理更多的参数,因为组合会随着每个RequestParams而增加?
3条答案
按热度按时间deyfvvtc1#
您要查找的是多条件查询。您可以使用非常简单的Example API
您将使用builder模式创建一个实体。Lombok可以在这一步中帮助您:
然后可以调用方法:
您将找到一个完整的here示例。
wj8zmpe12#
一种解决方案是使用单个方法,并通过管理查询中的空值使参数成为“可选”参数:
px9o7tmv3#
你不应该写太多的条件和/或调用函数。很难合并太多的条件。
在这种情况下,我经常写查询,将附加条件,如果参数不为空或如果指定。
下面是我的方式:
条件null不是必需的,你可以修改它。如果你不想在你的函数中有很多参数,你可以创建对象/上下文/Map来保存所有的过滤器。
PS:我使用字符串是为了可读性,你应该使用StringBuilder。
对于Spring-jpa:ExampleMatcher也可以这样做。
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-by-example.matchers