2011-09-19 59 views
0

我需要映射的一般形式SQL語句:如何爲包含多個參數系列的查詢製作iBatis參數映射?

SELECT ... 
FROM x, y, z 
WHERE (x.id = #x1# OR x.id = #x2# OR ...) 
    AND (y.id = #y1# OR y.id = #y2# OR ...) 
    AND z.name = #name#; 

所以,我有參數的兩個列表和1串。我想知道是否可以從iBatis dynamic SQL什麼東西。如果我只是可以建立我自己的WHERE條款並給予它。因爲不知何故,我想用iBatis將結果映射到Java對象...

你會怎麼做?

回答

0

您可以使用<iterate>標記遍歷參數列表。我懷疑你有2個列表,一個包含參數名稱,另一個包含參數值。是這樣嗎?

如果是這樣:要從中建立查詢,您必須同時迭代兩個列表,這在iBatis中是不可能的。相反,您將不得不創建一個包含名稱和值的類並傳遞它的列表。然後,您可以使用iBatis遍歷該(單個)列表,並使用列表中的「當前」項訪問名稱和值。嘗試使用這種方法,我過去成功地使用了它。我會盡快爲您找到一些源代碼。

編輯:好吧,它似乎你想要生成兩個塊有很多或加入條件。在這種情況下,您可以依次使用2個<iterate>標籤。如何將多個參數傳遞到查詢中需要幫助嗎?

+0

是啊,想了一會兒,我想我能夠擺脫一個列表。儘管如此,仍然有一個參數。似乎列表實際上放在一個地圖,但我可以通過一個列表和一個字符串的地圖。我不完全知道如何做現在的迭代的東西,但是似乎應該有可能做到至少,這很好:) – jonalv

+0

不,我錯了。我真的需要兩個名單。我可以先重複一遍,然後再遍歷另一遍。我希望... :) – jonalv

0

您的問題可能是您在iBatis(或myBatis)配置文件中構建查詢的方式的結果。

而不是一串or條件爲什麼不使用一個in條件。

下面是一個例子:

 
SELECT ... 
FROM x, y, z 
WHERE (x.id in (#xstring#) 
    AND (y.id in (#ystring#) 
    AND z.name = #name#; 
0

在foreach元素(僅適用於ibatis3 - MyBatis的)是非常強大的,並允許你指定一個集合,聲明可以在裏面的使用項目和指標變量元素的身體。它還允許您指定打開和關閉字符串,並添加一個分隔符以放置在迭代之間。元素非常聰明,它不會無意中附加額外的分隔符。