如何使用iBATIS的IN子句?(How to use an IN clause in iBATIS

2019-09-01 23:18发布

我使用iBATIS的创建select语句。 现在我想实现与iBATIS的下面的SQL语句:

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

用下面的方法,该声明没有正确准备和没有结果返回:

SELECT * FROM table WHERE col1 IN #listOfValues#;

iBATIS的似乎重组这个名单,并试图将其解释为一个字符串。

我怎样才能正确使用IN子句?

Answer 1:

下面是回答您的问题博客文章:

iBatis的:支持数组或列表参数有SQL IN关键字

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


Answer 2:

怎么样

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


Answer 3:

要么:

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


Answer 4:

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


Answer 5:

一个老问题,但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>

参考指南这里 。



Answer 6:

您可以使用它像这样:

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

使用$在IN声明。



文章来源: How to use an IN clause in iBATIS?
标签: java sql ibatis