iBatis in 语句参数传入方法

刚刚开始在工作中用到iBatis 在用到in去查询或者删除 我本来是传递一个String的参数,但是总是报以下的错误

上网查询有一下解决方案,本人已验证是可以的。

1、第一种:传入参数仅有数组
       <select id="GetEmailList_Test"  resultClass="EmailInfo_">
            select *
            from MailInfo with (nolock)
            where ID in
                <iterate open="(" close=")" conjunction="," >
                    #[]#
                </iterate>
        </select>
调用
            string[] strValue = new string[] { "1", "2", "3" };
            Reader.QueryForList<EmailInfoModel>("WebApp_Ibatisnet.dao.GetEmailList_Test", strValue );

       第二种:传入参数有数组,且有其他数据
        <select id="GetEmailList_Test3" parameterClass="TestIn" resultClass="EmailInfo_">
            select  top(#Count#)*
            from MailInfo with (nolock)
            where ID in
            <iterate open="(" close=")" conjunction="," property="ArrValue" >
                #ArrValue[]#
            </iterate>
        </select>
调用
            TestIn ti = new TestIn();
            ti.Count = 1;
            ti.ArrValue = strValue;
            return Reader.QueryForList<EmailInfoModel>("WebApp_Ibatisnet.dao.GetEmailList_Test3", ti);
实体类:
   public class TestIn
    {
        private int count;
        public int Count
        {
            get { return count; }
            set { count = value; }
        }
        private string[] arrValue;
        public string[] ArrValue
        {
            get { return arrValue; }
            set { arrValue = value; }
        }
    }

       第三种:in后面的数据确定,使用string传入
        <select id="GetEmailList_Test2" parameterClass="TestIn" resultClass="EmailInfo_">
            select *
            from MailInfo with (nolock)
            where ID in
            ($StrValue$)
        </select>
调用
                Reader.QueryForList<EmailInfoModel>("WebApp_Ibatisnet.dao.GetEmailList_Test2", "1,2,3");


其他信息:
Iterate的属性:
prepend -可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property -类型为java.util.List的用于遍历的元素(必选)
open -整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction -每次遍历内容之间的字符串,用于定义AND或OR(可选)
<iterate>遍历类型为java.util.List的元素。

以上引用地址:http://www.blogjava.net/yuhaibo736/archive/2012/02/03/369304.html

 

在这里还说明一下MyBatis 和 iBatis 用in的情况不是一样的 下面是MyBatis 用in查询的MXL设置

 

 

 

2、上面的那种方法是用id数组来传递参数的,我还找到另一种方法(已测试过),就是通过传递一个ids字符串来批量删除

ids="1,2,3" 参数字符串

<delete id="delete" parameterClass="java.lang.String">  

<![CDATA[  

 delete from table_name where keyid in(#ids#)

  ]]> 

</delete

 

3,大于号小于号特殊字符处理

直接在xml 文件中写 < 号会提示错误,而加上  <![CDATA[<=]]> 就不会了

 

posted @ 2015-03-11 16:28  莫名字  阅读(1968)  评论(0编辑  收藏  举报