如何用可能未输入的参数查询对象列表?

时间:2019-01-21 14:00:21

标签: mysql sql hibernate spring-boot parameters

我正在尝试查询由用户可能根本无法输入的参数过滤的对象列表。

@Query(value = "SELECT  * " +
        "FROM project  " +
        "WHERE CASE WHEN (:location is not null) THEN location_Id LIKE :location" +
        " and CASE WHEN (:category is not null) THEN category_Id LIKE :category", nativeQuery = true)
List<Project> getProjects(@Param("category") List<Category> category,
                          @Param("location") List<Location> location);

但是我仍然遇到类似的错误,即使我只是从教程中复制它,我的语法也是错误的。知道我可能会误会的地方吗?

1 个答案:

答案 0 :(得分:0)

如果您要进行单个查询:

WHERE (:location is null OR location_Id LIKE :location) AND
      (:category is null OR category_Id LIKE :category)

从性能的角度来看,OR会降低性能(通过阻止使用可用索引)。通常,应用程序会为非WHERE参数值构建NULL子句。