0

不知道这是否曾经在论坛上回答过。问题是如何避免在 java 代码中使用多个 if-else 语句,以便根据收到的输入进行渐进式查询构建。

下面的例子:

我在 UI 上有一个搜索表单,必须对其运行查询。UI 表单有多个参数。例如:如果搜索员工/员工,可以使用姓名(通配符)、工资组、办公地点等进行搜索。用户可以以任意组合填写此搜索表。

后端 sql 查询有多个连接表示例:employee、salarygroups、offices 等

数据正在使用 json 传输到服务器代码 .. 类似

    "filterRequest"
     {
         "employeeName": String,
         "salaryGroup": String,
         "offices": String
     }

以上只是一个示例,实际上我有大约 10 个可用于搜索的参数。问题是我目前正在编写多个 if else 语句来检查是否正在传递这些参数并相应地构建我的 SQL 查询,例如

     if(filterRequest.getEmployeeName()!=null){
     sqlQuery.append("and emp.employeeName like (:employeeName)");
     }
     if(filterRequest.getSalaryGroup()!=null){
     sqlQuery.append("and sal.getSalaryGroup like (:salaryGroup)");
     }


     return sqlQuery;
4

1 回答 1

1

您可以使用一种方法来检查并添加 sqlPart。例如像这样:

addSqlPart(sqlQuery, filterRequest, FilterRequest::getEmployeeName, "and emp.employeeName like (:employeeName)");
addSqlPart(sqlQuery, filterRequest, FilterRequest::getSalaryGroup, "and emp.salaryGroup like (:salaryGroup)");

检查给定 getter 是否有值并添加 sqlPart 的方法

    private static void addSqlPart(StringBuffer sqlQuery, FilterRequest filterRequest, Function<FilterRequest, Object> getter, String sqlPart) {
        Object value = getter.apply(filterRequest);
        if (value != null) {
            sqlQuery.append(sqlPart);
        }
    }
于 2020-09-07T08:21:55.700 回答