避免在sql查询构建java中使用multipe if else

vfh0ocws  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(329)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

4个月前关门了。
改进这个问题
不知道论坛上是否有人回答过这个问题。问题是如何避免在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;
wxclj1h5

wxclj1h51#

您可以使用一个方法来检查和添加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);
        }
    }

相关问题