如何在iBATIS中使用IN子句?

时间:2009-10-28 14:59:07

标签: java sql ibatis

我正在使用iBATIS来创建select语句。现在我想用iBATIS实现以下SQL语句:

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

使用以下方法,语句未正确准备且没有结果返回:

SELECT * FROM table WHERE col1 IN #listOfValues#;

iBATIS似乎重组了这个列表并尝试将其解释为字符串。

如何正确使用IN子句?

6 个答案:

答案 0 :(得分:32)

这是一篇回答你问题的博文:

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的。 E.g。

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

答案 1 :(得分:12)

怎么样

<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>

答案 2 :(得分:4)

或者:

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

答案 3 :(得分:0)

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

答案 4 :(得分: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

答案 5 :(得分:-1)

你可以像这样使用它:

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

在IN语句中使用$。