Spring jdbcTemplate динамическое предложение where - PullRequest
8 голосов
/ 22 мая 2011

Возможно ли генерировать произвольные условия SQL-запроса через шаблон Jdbc:

пример:

Если я передаю значение для 1 параметра (только имя): поиск по имени

"select * from address where shopname = ?";

Если я передам значение для 2-х параметров (имя и город) - поиск по названию магазина и городу:

"select * from address where shopname = ? and city = ?";

У меня есть несколько полей поиска.7 полей.Если пользователь вводит любую комбинацию.У меня есть поиск только на основе параметра.Как динамически передать параметры в SQL.Нужен фрагмент / Пример, как этого добиться.

Ответы [ 4 ]

10 голосов
/ 22 мая 2011

То, что вы хотите, это какой-то критерий построения API, который есть в Hibernate.К сожалению, я не думаю, что Spring JdbcTemplate имеет такую ​​возможность.Другие поправят меня, если я ошибаюсь ...

0 голосов
/ 27 мая 2018

Хотя некоторые ребята уже предположили, что Hibernate - лучший способ сделать это, но все же я думаю, что вы можете попробовать этот подход-

String sql = "select * from address where 1 = 1";

if(shopname != null)
  sql += "and shopname = :shopname";

if(city!= null)
  sql += "and city = :city";

и т. Д. И используйте NamedParameterJdbcTemplate

0 голосов
/ 17 марта 2015

Spring Data и Hibernate имеют такую ​​функциональность.Хотя, возможно, не стоит перетаскивать такие большие рамки для вашего приложения.

Вы можете попробовать проверить SimpleJdbcInsert http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html

Изменить: В качестве альтернативы вы можете попробовать исправить это в SQL с проверкой на пустое, но если у вас многоданные, чтобы пройти, эта техника замедлит ваш запрос.

"select * from address 
where (shopname = ? or shopname = null)
 and (city = ? or city = null)";
0 голосов
/ 27 мая 2011

Если Scala является опцией для вас, запрос может быть построен примерно так:

case class Search(shopname:String, city:String = None) {
 def sql = "select * from address where shopname = '"+shopname+"'" + city.map(" and city = '"+
      _ +"'").getOrElse("")  
}

Пример использования:

Search("lloh").sql
Search("lloh", Some("Austin")).sql
...