Spring中具有可变结构的SQL查询

时间:2013-11-18 19:02:40

标签: java database spring

我想根据用户输入查询数据库。例如,如果此输入为“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};

2 个答案:

答案 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,您可以在项目自述文件中找到其他人的链接。