代码之家  ›  专栏  ›  技术社区  ›  guerda

如何在iBATIS中使用in子句?

  •  17
  • guerda  · 技术社区  · 15 年前

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

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

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

    SELECT * FROM table WHERE col1 IN #listOfValues#;
    

    iBatis似乎重新构造了这个列表,并试图将其解释为一个字符串。

    如何正确使用IN子句?

    6 回复  |  直到 6 年前
        1
  •  32
  •   vsingh    11 年前

    以下是一篇回答您问题的博客文章:

    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);
    
        2
  •  12
  •   Jonathan Feinberg    15 年前

    怎么样

    <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>
    
        3
  •  4
  •   Jason Plank Vijay    13 年前

    或:

    <select id="select-test" resultMap="MyTableResult" parameterClass="list"> 
     select * from table where
     <iterate property="list" conjunction="OR">
      col1 = #list[]#
     </iterate>
    </select>
    
        4
  •  0
  •   Jack Ishu    12 年前
    <select id="select-test" parameterClass="list"resultMap="YourResultMap">
         select * from table where col_1 IN 
         <iterate open="(" close=")" conjunction=",">
          #[]#
        </iterate>
    </select>
    
        5
  •  0
  •   Itaypk    6 年前

    一个老问题,但是对于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 .

        6
  •  -1
  •   iamxhu    14 年前

    你可以这样使用它:

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

    使用in语句中的$。