根据搜索过滤器参数创建动态SQL查询

时间:2019-04-28 18:44:39

标签: java sql spring

我正在Web应用程序中创建搜索过滤器,并希望根据参数创建动态sql查询。

我假设参数可以具有固定值(height = 100)或在范围内(min_height = 100&max_height = 200)。

问题: 有什么好的可能性来进行动态sql查询?我想要动态的WHERE子句。

伪代码:

  1. 如果是固定值
WHERE <table>.height = searchFilter.getHeight, 
  1. 在范围内
WHERE <table>.height BETWEEN searchFilter.getMinHeight AND searchFilter.getMaxHeight

我正在使用spring的jdbcTemplate。

[编辑] 如果参数是可选的,例如设置了高度,但是没有设置宽度(然后在WHERE子句 width 中应省略)?主要问题是如何动态查询,而不是该特定用例。

2 个答案:

答案 0 :(得分:0)

WHERE <table>.height = searchFilter.getHeight

等同于

WHERE <table>.height between searchFilter.getHeight and searchFilter.getHeight

所以要查询

WHERE <table>.height between ? and ?

,只需提供高度或范围,这取决于您得到的东西。

如果参数可以是可选的,只需在主要条件之前进行检查:

where ? is not null and ? is not null and height between ? and ?

where (? is not null and ? >= height) and (? is not null and ?<= height)

我认为SQL可以成功执行,但是这不是最佳实践,因为您的查询中将包含隐式逻辑。对于更多动态查询,请考虑使用JPA / Hibernate来实现条件查询。

答案 1 :(得分:0)

只需使用minHeightmaxHeight并使用:

WHERE <table>.height BETWEEN searchFilter.getMinHeight AND searchFilter.getMaxHeight

如果您想要height的单个值,请将最小值和最大值设置为相同的值。