2013-11-18 2 views
0

Я хочу запросить базу данных на основе пользовательского ввода. Например, если этот вход «длинный красный провод», запрос должен быть:SQL-запрос с переменной структурой весной

SELECT * FROM foo WHERE tag ILIKE 'long' OR tag ILIKE 'red' OR tag ILIKE 'wire'; 
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

Как вы можете видеть, меняется структура запроса с входом, это не только данные.

Имеет ли Spring какие-либо функциональные возможности для обработки запросов с переменными структурами? Или я должен сам построить строку?


Это несколько, что я имею в виду.

SELECT * FROM foo WHERE {{tag = '?'} OR}; 

ответ

2

мне кажется, что вы заинтересованы в выберите заявление «в», с весны вы можете сделать, как это ...

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 { 
      .... 
     } 
    }); 
+0

Я опустил его с тех пор, как я не имел никакого отношения к вопросу. Сопоставление производится с помощью «ILIKE» вместо «=» (я уже отредактировал его). Тем не менее, я мог бы сделать обходной путь, который позволит мне использовать «=», поэтому я могу использовать ваш ответ (+1). Я подожду пару дней, чтобы узнать, знает ли кто-нибудь метод для достижения именно того, что я хочу, а если нет, я буду отмечать ваш ответ как действительный. – eversor

1

Первый ответ правильный один для данного конкретного случая, когда он может быть представлено как выражение in.

Если вы хотите построить строку запроса во время выполнения - spring-jdbc не поддерживает это из коробки. Для этого есть много сторонних библиотек, я написал один - query-string-builder, вы можете найти ссылки на другие в файле readme.

Смежные вопросы