有没有一种方法可以根据参数值使MySQL查询行为有所不同?

时间:2019-04-13 13:41:49

标签: java mysql spring jpa search

我正在研究具有搜索功能的项目,并且尝试通过单个MySQL查询进行特定的搜索。 我的问题是某些查询参数不是必需的,因此它们可以为null。 如果某些参数为null,有没有办法使MySQL查询“忽略”其自身部分?我想避免在DB中编写过程。 我们正在使用带有JPA的Spring Boot。

如果在重复的问题上存在重复,我在网上找不到任何解决方案。

在这个简单的示例中,我想知道是否有可能进行查询,如果ownerName为NULL,ownerName(?2)与嵌套select之间的比较可以返回TRUE。

@Query(
    value= "SELECT * FROM car WHERE car.name = ?1 
       AND ?2 = (SELECT person.name FROM person WHERE person.id = car.owner_id)",
    nativeQuery = true)  
List<Car> findCarsByNameAndOwnerName(String carName, String ownerName);

1 个答案:

答案 0 :(得分:1)

是的,您可以通过应用OR <parameter> IS NULL谓词来完成这项工作。例如,要将两个参数都设为可选,可以这样:

@Query(
value= "SELECT * FROM car WHERE (car.name = ?1 OR ?1 IS NULL)
   AND (?2 = (SELECT person.name FROM person WHERE person.id = car.owner_id) OR ?2 IS NULL)",
nativeQuery = true)  
List<Car> findCarsByNameAndOwnerName(String carName, String ownerName);