我正在Web应用程序中创建搜索过滤器,并希望根据参数创建动态sql查询。
我假设参数可以具有固定值(height = 100)或在范围内(min_height = 100&max_height = 200)。
问题: 有什么好的可能性来进行动态sql查询?我想要动态的WHERE子句。
伪代码:
WHERE <table>.height = searchFilter.getHeight,
WHERE <table>.height BETWEEN searchFilter.getMinHeight AND searchFilter.getMaxHeight
我正在使用spring的jdbcTemplate。
[编辑] 如果参数是可选的,例如设置了高度,但是没有设置宽度(然后在WHERE子句 width 中应省略)?主要问题是如何动态查询,而不是该特定用例。
答案 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)
只需使用minHeight
和maxHeight
并使用:
WHERE <table>.height BETWEEN searchFilter.getMinHeight AND searchFilter.getMaxHeight
如果您想要height
的单个值,请将最小值和最大值设置为相同的值。