我目前正在开发一个功能,它允许系统通过 6 个参数的组合来搜索公共服务收据,这些参数可以为空,这意味着收据不应被此参数过滤:accountNumber、amountRangeMin、amountRangeMax、dateRangeMin、dateRangeMax,公共服务标识。然而,为每个参数组合制定一个方法不是一种选择,我认为必须有更好的方法,起初我的方法如下:
在我的服务中,我有这个方法:
public Map<String,Object> findPublicServiceReceiptsByParams(Integer accountNumber, BigDecimal amountRangeMin,
BigDecimal amountRangeMax, LocalDate dateRangeMin, LocalDate dateRangeMax, Integer publicServiceId) {
Map<String,Object> publicServiceReceipts = new HashMap<String,Object>();
String accountNumberFilter = !(accountNumber==null) ? accountNumber.toString() : "AccountNumberTableName";
String amountRangeMinFilter = !(amountRangeMin==null) ? amountRangeMin.toString() : "table.AmountColumnName";
String amountRangeMaxFilter = !(amountRangeMax==null) ? amountRangeMax.toString() : "table.AmountColumnName";
String dateRangeMinFilter = !(dateRangeMin==null) ? dateRangeMin.toString() : "Table.ReceiptCreationDateColumn";
String dateRangeMaxFilter = !(dateRangeMax==null) ? dateRangeMax.toString() : "Table.ReceiptCreationDateColumn";
String publicServiceIdFilter = !(publicServiceId==null) ? publicServiceId.toString() : "table.publicServiceIdColumn";
publicServiceReceipts = publicServiceReceiptRepository.findPublicServiceReceiptsByParams(accountNumberFilter,
amountRangeMinFilter, amountRangeMaxFilter, dateRangeMinFilter, dateRangeMaxFilter,
publicServiceIdFilter);
return publicServiceReceipts;
}
我的推理是,如果参数为空意味着使用 Web 服务的人对该参数不感兴趣,因此如果发生这种情况,我将该变量设置为列名,这样它就不会影响 WHERE 子句,并且理论上使它成为更简单,但我发现它会将名称作为字符串发送,因此它不会被识别为 sql 语句,这是我思想中的缺陷,正如我所说,除了为每个组合编写每个方法之外,必须有另一种方式,我感谢任何帮助:)。
暮色呼如
相关分类