2009-10-28 73 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