2015-05-07 2 views
0

Я работаю над приложением Spring-MVC, в котором я хотел бы искать в базе данных для комбинации параметров, которые пользователь выбирает. Итак, допустим, что существует 10 параметров, и если пользователь выбирает 7 из них, как я могу эффективно написать один метод в DAO с помощью одного запроса, который может адаптироваться к числу параметров. Пожалуйста, см рисунок ниже:Spring-MVC, Hibernate, Postgres: Поиск в базе данных с несколькими переменными

Ebay search

Как вы можете видеть на левой стороне, есть несколько вариантов, и пользователь может выбрать в зависимости от того как пользователь выберет. Я ищу что-то подобное, когда я создал объект объекта поиска и этот объект, который я хотел бы передать dao, где его переменные будут извлечены и поиск будет выполнен в базе данных.

Но если есть даже как 3 переменных, я вижу запрос, глядя, как:

Псевдо код:

public ResultObject doSearch(var1, var3, var3){ 
if((var1==true)){ 
// hibernate query for search where var1 equals true 
} 
if(!(var2==null)&&(var1==true)){ 
//Hibernate query for search where var2 is set by user and var1 is true 
} 
} 

Но если я держу его делать это в такой ужасной моде, я никогда не буду Конец. Каким образом можно обрабатывать несколько переменных для поиска, когда должны быть включены только те, которые установлены, а другие - отброшены. Пожалуйста, дайте мне знать. Благодарю.

ответ

1

Используйте StringBuilder. Пока переменные независимы друг от друга, это должно быть проще.

StringBuilder sb = new StringBuilder(); 

sb.append("FROM phone WHERE 1=1 "); 


if (var1) { 
    sb.append(" AND var1 = :var1"); 
} 

if (var2) { 
    sb.append(" AND var2 = :var2 "); 
} 

sb.toString(); 
+0

Это выглядит многообещающе, я полагаю, что могу использовать его также для булевых и других. Да, они независимы, я создал для них объектную модель, так как мне также нужно сохранить историю поиска. Все еще кажется немного ручным, я подумал, что может быть какой-то продвинутый механизм, поскольку там могут быть проекты, у которых есть 50-60 параметров поиска или больше, тогда это будет утомительно. –