2015-05-07 102 views
0

我正在一個Spring-MVC應用程序中,我想在數據庫中搜索用戶選擇的選項組合。假設有10個選項,並且如果用戶選擇了其中的7個選項,那麼我怎樣纔能有效地在DAO中編寫單個方法,並使用一個可以適應選項數量的查詢。請參見下圖:Spring-MVC,休眠,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個搜索參數或更多的項目,那麼這將是乏味的。 –