2009-10-28 122 views
17

我正在使用iBATIS來創建選擇語句。現在,我想與iBATIS的執行下面的SQL語句:如何在iBATIS中使用IN子句?

SELECT * FROM table WHERE col1 IN ('value1', 'value2'); 

下列方法處理,沒有正確準備的發言並沒有結果回報:

SELECT * FROM table WHERE col1 IN #listOfValues#; 

iBATIS的似乎重組這個名單和試圖將其解釋爲一個字符串。

如何正確使用IN子句?

回答

31

這裏有一個博客貼子,回答你的問題:

iBatis: Support for Array or List Parameter with SQL IN Keyword

<select id="select-test" resultMap="MyTableResult" parameterClass="list"> 
select * from my_table where col_1 in 
    <iterate open="(" close=")" conjunction=","> 
    #[]# 
    </iterate> 
</select> 

而且在Java中,你應該在 java.util.List的通。例如。

List<String> list = new ArrayList<String>(3); 
list.add("1"); 
list.add("2"); 
list.add("3"); 
List objs = sqlMapClient.queryForList("select-test",list); 
+0

所有這些xml讓我想嘔吐,但thx的信息非常有用的項目,我必須使用ibatis – Rick 2011-12-09 20:04:05

+2

我不能相信我只是upvoted一個iBatis的問題/答案。這個項目什麼時候結束,我可以停止使用iBatis? – 2012-12-05 15:49:57

+1

那麼,iBatis是太棒了。至少你會寫SQL而不是其他一些可憎的東西。 – 2014-12-30 00:59:38

11

如何

<select id="foo" parameterClass="Quuxly" resultClass="Flobitz"> 
    select * from table 
    <dynamic prepend="where col1 in "> 
     <iterate property="list_of_values" open="('" close="')" conjunction=", "> 
      #list_of_values[]# 
     </iterate> 
    </dynamic> 
</select> 
+0

謝謝,我太愚蠢的研究,它看起來像。 – guerda 2009-10-28 15:09:39

+0

謝謝,你救了我的生命:D – glider 2015-07-28 03:29:07

4

或者:

<select id="select-test" resultMap="MyTableResult" parameterClass="list"> 
select * from table where 
<iterate property="list" conjunction="OR"> 
    col1 = #list[]# 
</iterate> 
</select> 
-1

您可以使用它像這樣:

<select id="select-test" resultMap="MyTableResult" > 
select * from my_table where col_1 in 
$listOfValues$ 
</select> 

使用$在IN聲明。

+0

這會生成類似[aaa,abb,acc]的內容,你能否建議我如何將這個默認'[]'改成'()',因爲oracle不支持'[]' – Saif 2014-08-27 05:35:46

0
<select id="select-test" parameterClass="list"resultMap="YourResultMap"> 
    select * from table where col_1 IN 
    <iterate open="(" close=")" conjunction=","> 
     #[]# 
    </iterate> 
</select> 
+1

謹慎評論你的代碼?如果在2年前有9個upvotes的另一個被接受的答案,你的答案是什麼可以增加這個重要的答案? – Yaroslav 2012-10-05 10:00:12

0

一個老問題,但MyBatis的一個用戶,語法是有點不同:

<select id="selectPostIn" resultType="domain.blog.Post"> 
    SELECT * 
    FROM POST P 
    WHERE ID in 
    <foreach item="item" index="index" collection="list" 
     open="(" separator="," close=")"> 
     #{item} 
    </foreach> 
</select> 

參考guide in here