Java 在Spring Boot中使用查询参数的最佳方法

Java 在Spring Boot中使用查询参数的最佳方法,java,spring,spring-boot,spring-data-jpa,Java,Spring,Spring Boot,Spring Data Jpa,我在代码中有我的JPA存储库,它有多个findByColumn方法用于快速查找 很少有findBy子句具有多个列,如findbycolumn1和column2和column3,还有许多更像findBy子句或前面提到的多个列的组合 我目前的问题是,我希望我的客户机对所有select/fetch操作只使用一个端点,每个列都使用RequestParam,如果他没有在请求端点上输入任何预期的列值,我将默认值设置为“NA”我使用if子句标识所有传入字段参数,然后调用受尊重的存储库端点 我现在的问题是由于在

我在代码中有我的JPA存储库,它有多个findByColumn方法用于快速查找

很少有findBy子句具有多个列,如findbycolumn1和column2和column3,还有许多更像findBy子句或前面提到的多个列的组合

我目前的问题是,我希望我的客户机对所有select/fetch操作只使用一个端点,每个列都使用RequestParam,如果他没有在请求端点上输入任何预期的列值,我将默认值设置为“NA”我使用if子句标识所有传入字段参数,然后调用受尊重的存储库端点

我现在的问题是由于在同一个端点请求中添加了多个新列,我的if子句if变得疯狂,我相信足够多的代码不会对其他团队成员的用户友好

任何人都可以建议如何在spring boot应用程序上实现这个动态查询部分

我的控制器代码段如下所示:

@GetMapping("/getdata")
public ResponseEntity<Page<PojoTbl>> getDataFromDB(
        @PageableDefault(page = 0, size = 20) @SortDefault.SortDefaults({
                @SortDefault(sort = "id", direction = Sort.Direction.DESC) }) Pageable pageable,
        @RequestParam(value = "col1", required = false, defaultValue = "NA") String col1,
        @RequestParam(value = "col2", required = false, defaultValue = "NA") String col2,
        @RequestParam(value = "col3", required = false, defaultValue = "NA") String col3,
        @RequestParam(value = "col4", required = false, defaultValue = "NA") String col4,
        @RequestParam(value = "col5", required = false, defaultValue = "NA") String col5,
        @RequestParam(value = "col6", required = false, defaultValue = "NA") String col6,
        @RequestParam(value = "col7", required = false, defaultValue = "NA") String col7,
        @RequestParam(value = "col8", required = false, defaultValue = "NA") String col8,
        @RequestParam(value = "id", required = false) Long id) {

    Page<PojoTbl> selectedRecords = myService.findDataFromDB(col1,
            col2, col3, col4, col5, col6, col7, id,
            col8, pageable);

    return ResponseEntity.ok(selectedRecords);

}
public Page<PojoTbl> findDataFromDB(String col1, String col2,
        String col3, String col4, String col5, String col6,
        String col7, Long id, String col8, Pageable pageable) {

    Page<PojoTbl> selectedRecords = null;

    if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findAll(pageable);

    } else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && !col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol8IgnoreCase(col8, pageable);

    } else if (!col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol1IgnoreCase(col1, pageable);

    } else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol5IgnoreCase(col5, pageable);

    } else if (col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol2IgnoreCase(col2, pageable);

    } else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && !col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol6IgnoreCase(col6, pageable);

    } else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && !col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol7IgnoreCase(col7, pageable);

    } else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && !Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findById(id, pageable);

    } else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol1Andcol2IgnoreCase(col1, col2,
                pageable);

    } else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol1Andcol2Andcol5IgnoreCase(col1,
                col2, col5, pageable);


    } else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && !col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol1Andcol2Andcol6IgnoreCase(col1,
                col2, col6, pageable);

    } else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && !col6.equals("NA") && !col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository
                .findBycol1Andcol2Andcol6Andcol7IgnoreCase(col1, col2,
                        col6, col7, pageable);

    } else if (!col1.equals("NA") && !col2.equals("NA") && !col3.equals("NA")
            && !col4.equals("NA") && !col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository
                .findBycol1Andcol2Andcol3Andcol4Andcol6IgnoreCase(
                        col1, col2, col3, col4, col6, pageable);

    } else if (!col1.equals("NA") && !col2.equals("NA") && !col3.equals("NA")
            && !col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository
                .findBycol1Andcol2Andcol3Andcol4Andcol5IgnoreCase(
                        col1, col2, col3, col4, col5, pageable);

    }
    return selectedRecords;

}
@GetMapping(“/getdata”)
公共响应从数据库获取数据(
@PageableDefault(page=0,size=20)@SortDefault.SortDefaults({
@SortDefault(sort=“id”,direction=sort.direction.DESC)})可分页可分页,
@RequestParam(value=“col1”,required=false,defaultValue=“NA”)字符串col1,
@RequestParam(value=“col2”,required=false,defaultValue=“NA”)字符串col2,
@RequestParam(value=“col3”,required=false,defaultValue=“NA”)字符串col3,
@RequestParam(value=“col4”,required=false,defaultValue=“NA”)字符串col4,
@RequestParam(value=“col5”,required=false,defaultValue=“NA”)字符串col5,
@RequestParam(value=“col6”,required=false,defaultValue=“NA”)字符串col6,
@RequestParam(value=“col7”,required=false,defaultValue=“NA”)字符串col7,
@RequestParam(value=“col8”,required=false,defaultValue=“NA”)字符串col8,
@RequestParam(value=“id”,required=false)长id){
Page selectedRecords=myService.findDataFromDB(col1,
col2,col3,col4,col5,col6,col7,id,
col8,可分页);
返回ResponseEntity.ok(已选择记录);
}
相同的后端服务层如下所示:

@GetMapping("/getdata")
public ResponseEntity<Page<PojoTbl>> getDataFromDB(
        @PageableDefault(page = 0, size = 20) @SortDefault.SortDefaults({
                @SortDefault(sort = "id", direction = Sort.Direction.DESC) }) Pageable pageable,
        @RequestParam(value = "col1", required = false, defaultValue = "NA") String col1,
        @RequestParam(value = "col2", required = false, defaultValue = "NA") String col2,
        @RequestParam(value = "col3", required = false, defaultValue = "NA") String col3,
        @RequestParam(value = "col4", required = false, defaultValue = "NA") String col4,
        @RequestParam(value = "col5", required = false, defaultValue = "NA") String col5,
        @RequestParam(value = "col6", required = false, defaultValue = "NA") String col6,
        @RequestParam(value = "col7", required = false, defaultValue = "NA") String col7,
        @RequestParam(value = "col8", required = false, defaultValue = "NA") String col8,
        @RequestParam(value = "id", required = false) Long id) {

    Page<PojoTbl> selectedRecords = myService.findDataFromDB(col1,
            col2, col3, col4, col5, col6, col7, id,
            col8, pageable);

    return ResponseEntity.ok(selectedRecords);

}
public Page<PojoTbl> findDataFromDB(String col1, String col2,
        String col3, String col4, String col5, String col6,
        String col7, Long id, String col8, Pageable pageable) {

    Page<PojoTbl> selectedRecords = null;

    if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findAll(pageable);

    } else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && !col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol8IgnoreCase(col8, pageable);

    } else if (!col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol1IgnoreCase(col1, pageable);

    } else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol5IgnoreCase(col5, pageable);

    } else if (col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol2IgnoreCase(col2, pageable);

    } else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && !col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol6IgnoreCase(col6, pageable);

    } else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && !col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol7IgnoreCase(col7, pageable);

    } else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && !Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findById(id, pageable);

    } else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol1Andcol2IgnoreCase(col1, col2,
                pageable);

    } else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol1Andcol2Andcol5IgnoreCase(col1,
                col2, col5, pageable);


    } else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && !col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository.findBycol1Andcol2Andcol6IgnoreCase(col1,
                col2, col6, pageable);

    } else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
            && col4.equals("NA") && !col6.equals("NA") && !col7.equals("NA")
            && Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository
                .findBycol1Andcol2Andcol6Andcol7IgnoreCase(col1, col2,
                        col6, col7, pageable);

    } else if (!col1.equals("NA") && !col2.equals("NA") && !col3.equals("NA")
            && !col4.equals("NA") && !col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository
                .findBycol1Andcol2Andcol3Andcol4Andcol6IgnoreCase(
                        col1, col2, col3, col4, col6, pageable);

    } else if (!col1.equals("NA") && !col2.equals("NA") && !col3.equals("NA")
            && !col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
            && Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {

        selectedRecords = tableJpaRepository
                .findBycol1Andcol2Andcol3Andcol4Andcol5IgnoreCase(
                        col1, col2, col3, col4, col5, pageable);

    }
    return selectedRecords;

}
公共页面findDataFromDB(字符串col1、字符串col2、,
字符串col3,字符串col4,字符串col5,字符串col6,
字符串col7,长id,字符串col8,可分页(可分页){
页面selectedRecords=null;
如果(col1.equals(“NA”)和&col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&col6.equals(“NA”)和&col7.equals(“NA”)
&&Objects.isNull(id)和&col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.findAll(可分页);
}else如果(col1.equals(“NA”)和&col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&col6.equals(“NA”)和&col7.equals(“NA”)
&&Objects.isNull(id)和&col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.findBycol8IgnoreCase(col8,可分页);
}否则如果(!col1.equals(“NA”)和&col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&col6.equals(“NA”)和&col7.equals(“NA”)
&&Objects.isNull(id)和&col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.findBycol1IgnoreCase(col1,可分页);
}else如果(col1.equals(“NA”)和&col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&col6.equals(“NA”)和&col7.equals(“NA”)
&&Objects.isNull(id)和&!col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.findBycol5IgnoreCase(col5,可分页);
}else如果(col1.equals(“NA”)和&!col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&col6.equals(“NA”)和&col7.equals(“NA”)
&&Objects.isNull(id)和&col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.findBycol2IgnoreCase(col2,可分页);
}else如果(col1.equals(“NA”)和&col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&!col6.equals(“NA”)和&col7.equals(“NA”)
&&Objects.isNull(id)和&col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.findBycol6IgnoreCase(col6,可分页);
}else如果(col1.equals(“NA”)和&col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&col6.equals(“NA”)和&col7.equals(“NA”)
&&Objects.isNull(id)和&col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.findBycol7IgnoreCase(col7,可分页);
}else如果(col1.equals(“NA”)和&col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&col6.equals(“NA”)和&col7.equals(“NA”)
&&!Objects.isNull(id)和&col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.findById(id,可分页);
}如果(!col1.equals(“NA”)和&!col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&col6.equals(“NA”)和&col7.equals(“NA”)
&&Objects.isNull(id)和&col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.findBycol1和col2gnorecase(col1,col2,
可分页);
}如果(!col1.equals(“NA”)和&!col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&col6.equals(“NA”)和&col7.equals(“NA”)
&&Objects.isNull(id)和&!col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.FindBycol1和col2和col5 IgnoreCase(col1,
col2,col5,可分页);
}如果(!col1.equals(“NA”)和&!col2.equals(“NA”)和&col3.equals(“NA”)
&&col4.equals(“NA”)和&!col6.equals(“NA”)和&col7.equals(“NA”)
&&Objects.isNull(id)和&col5.equals(“NA”)和&col8.equals(“NA”)){
selectedRecords=tableJpaRepository.FindByCol1和Col2和Col6 IgnoreCase(c
@Query("select p from PojoTbj p where " + 
    "(upper(p.col1) like upper(?1) or ?1 is null))