18

私はiBATISを使用してselectステートメントを作成しています。ここで、iBATISを使用して次のSQLステートメントを実装したいと思います。

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

次のアプローチでは、ステートメントが正しく準備されず、結果が返されません。

SELECT * FROM table WHERE col1 IN #listOfValues#;

iBATISはこのリストを再構築し、文字列として解釈しようとしているようです。

IN句を正しく使用するにはどうすればよいですか?

4

6 に答える 6

32

これがあなたの質問に答えるブログ投稿です:

iBatis:SQLINキーワードを使用した配列またはリストパラメータのサポート

<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);
于 2009-10-28T15:08:30.807 に答える
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>
于 2009-10-28T15:06:14.167 に答える
4

または:

<select id="select-test" resultMap="MyTableResult" parameterClass="list"> 
 select * from table where
 <iterate property="list" conjunction="OR">
  col1 = #list[]#
 </iterate>
</select>
于 2010-04-29T20:10:14.503 に答える
0
<select id="select-test" parameterClass="list"resultMap="YourResultMap">
     select * from table where col_1 IN 
     <iterate open="(" close=")" conjunction=",">
      #[]#
    </iterate>
</select>
于 2012-09-12T20:10:50.480 に答える
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>

こちらのガイドを参照してください。

于 2017-12-22T16:57:29.773 に答える
-1

次のように使用できます。

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

INステートメントで$を使用します。

于 2010-06-23T02:32:11.793 に答える