假设我有一个Employee
类,有多个字段,比如姓名
,年龄
,薪水
,职务
,加入日期
,性别
,等等。现在,我如何应用过滤和许多这样的参数?在这种情况下,可能有许多组合。(例如,如果我想要6个过滤器,那么总共可以有6个!=720个组合!!!)
只有2、3个参数,比如年龄
,薪水
,姓名
;然后我可以写多个例子,比如:
if(age!=null && name==null && salary==null)
{
findByAge
}
if(age==null && name!=null && salary==null)
{
findByName
}
if(age!=null && name!=null && salary==null)
{
findByAgeAndName
}
等。但是如何处理更多的参数,因为组合会随着每个请求参数的增加而增加?
解决方案是使用单一方法,并通过管理查询中的空值使参数“可选”:
@Query("""
select a from YourEntity a where
(?1 is null or a.name = ?1)
and (?2 is null or a.age= ?2)
and (?3 is null or a.salary = ?3)
and (?4 is null or a.description = ?4)
and (?5 is null or a.joiningDate = ?5)
and (?6 is null or a.gender = ?6)
""")
List<YourEntity> findFiltered(String name, Integer age, Float salary, String designation, LocalDateTime joiningDate, String gender)
你不应该写很多条件和/或调用函数。很难将多种情况结合起来。
在这种情况下,我经常编写一个查询,如果参数不为null或指定,它将附加条件。
这是我的方式:
String query = "select * from table where 1=1";
Map<String,Object> params = new HashMap<>();
if(filter1!=null){
query += " and field1 = :filter1";
params.put("filter1",filter1);
}
if(filter2!=null){
query += " and field2 = :filter2";
params.put("filter2",filter2);
}
dao.execute(query,params);
条件null不是必需的,您可以调整它。以防你不想在函数中有很多参数。您可以创建对象/上下文/映射来保存所有过滤器。
PS:为了可读性,我使用字符串,你应该使用StringBuilder。
对于spring jpa:ExampleMatcher也可以这样做。
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-举个例子。匹配器
您需要的是多条件查询。您可以使用非常简单的示例API
在你的例子中,代码应该是这样的:
您将创建一个具有构建器模式的实体。Lombok可以在这一步帮助您:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;
// your other fields
}
然后你可以调用你的方法:
Employee employee = Employee
.builder()
.name(nameValue)
.age(ageValue)
.build();
return repository.findAll(Example.of(employee));
你会在这里找到一个完整的例子。
问题内容: 我试图弄清楚如何在URL中传递多个参数。我想将纬度和经度从我的android类传递给Java servlet。我怎样才能做到这一点? 在这种情况下,输出(写入文件)为。这是可行的,但我想在两个单独的参数中传递纬度和经度,以便减少在服务器端的工作。如果不可能,我如何至少在&之间添加一个空格,以便可以使用class获取经度和纬度。我试过以下行,但无济于事。 我的servlet代码如下: 我
本文向大家介绍在 mapper 中如何传递多个参数?相关面试题,主要包含被问及在 mapper 中如何传递多个参数?时的应答技巧和注意事项,需要的朋友参考一下 1、第一种: 2、第二种:使用 \@param 注解: 然后,就可以在 xml 像下面这样使用(推荐封装为一个 map,作为单个参数传递给mapper) 3、第三种:多个参数封装成 map
假设我有一个Employee类。它有很多字段,比如id、名字、姓氏、姓名、年龄、薪水和其他字段。现在,我正在进行一个Get查询,希望使用所有这些字段(required=false)作为请求参数传递。 但问题是,可能有许多组合,如(firstName, age)或(age,工资,lastName)或(指定,年龄,工资,lastName)等等。那么我应该如何处理所有这些筛选器。我必须为每个案例编写每个
我想通过Spring过滤器或方面记录超文本传输协议请求中的请求参数。我尝试了不同的方法,但请求参数为空或未调用方法。我使用的是POSTMAN,它是一个POST请求。 http://localhost:8080/available data 请求正文示例: {“keyUserAgent”:“CFNetwork/1209 Darwin/20.2.0”,“locale”:“en_US”,“eid”:“8
我有一个JSON数据文件 首先,我想读取这个数据,当wheels.value==Yes时,我想点击一个API,否则点击另一个API,我想知道如何在post请求中或从文件中传递多个参数。 Post请求数据如下: 上面的数据我正在邮递员中传递“表单-数据”。 提前致谢
问题内容: 我该怎么做-在swift中传递两个NSStringDrawing选项作为函数参数: 问题答案: 编辑:在 Swift 3.0中 : 编辑: 这就是您将在Swift 2.0中使用选项枚举的方式 : 编辑: 此问题 已在iOS 8.3 SDK Beta 1(12F5027d)中得到解决 : 修改后的[struct] 从: 至: 您现在可以编写: 经过一番研究和@Anton Tcholako