我想根据用户输入查询数据库。例如,如果此输入为“long red wire”,则查询必须为:
SELECT * FROM foo WHERE tag ILIKE 'long' OR tag ILIKE 'red' OR tag ILIKE 'wire';
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如您所见,查询结构随输入而变化,而不仅仅是数据。
Spring是否提供任何功能来处理具有可变结构的查询?或者我应该自己构建字符串?
这是我的想法。
SELECT * FROM foo WHERE {{tag = '?'} OR};
答案 0 :(得分:2)
在我看来,你对select语句“in”感兴趣,春天你可以这样做......
NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate( jdbcTemplate.getDataSource() );
Set<String> maps = new HashSet<String>();
maps.add("long")
maps.add("red")
maps.add("wire")
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("tags", maps );
namedJdbcTemplate.query( "SELECT ... tags in (:tags)" , params , new RowMapper() {
@Override
public Object mapRow(ResultSet rs, int arg1) throws SQLException {
....
}
});
答案 1 :(得分:1)
对于这种特殊情况,第一个答案是正确的,它可以表示为in
表达式。
如果要在运行时构建查询字符串 - spring-jdbc不支持开箱即用。 有很多第三方库可以做到,我还写了一个 - query-string-builder,您可以在项目自述文件中找到其他人的链接。