我们如何在iBatis中传递多于IN子句的参数

时间:2014-07-18 10:03:38

标签: ibatis ibator

我知道我们可以在子句中传递list / string数组,如下面的代码

来自here

请告诉我如何通过iBatis中的IN子句传递多个参数。

1 个答案:

答案 0 :(得分:0)

这是可能的。

定义一个用于保存输入的类,它将保存Select所需的三个属性,因此它们可能是:

  • FirstName(字符串)
  • LastName(字符串)
  • UserNames(字符串列表)

如果你使用的是C#,它可能看起来像这样:

public class UserRetrievalParams
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public IList<String> UserNames { get; set; }
}

......或类似的东西。构造该对象的实例,并使用您的用户名填充列表。

然后将该对象作为参数传递给Ibatis,您可以像这样引用属性:

<select id="example" resultMap="yourMap" parameterClass="UserRetrievalParams">
    select * from YourTable where

    username in
    <iterate property="UserNames" open="(" close=")" conjunction=",">
        #UserNames[]:char#
    </iterate>

    and user_first_name=#FirstName:char#
    and user_last_name=#LastName:char#
</select>

注意必须在两个地方引用UserNames列表属性的稍微反直觉的语法:在iterate属性中,再在iterate标记之间。

我在.Net 2及更高版本上使用Ibatis 1.6.2.0版成功使用此语法。

希望有所帮助。