zoukankan      html  css  js  c++  java
  • ibatis 多种传参方式

    1,在公司项目yuda遇到的传入in语句,如果直接拼接in语句:in (....),sqlmap中使用#...#输出是不行的。

            为需要使用:

                               第三种: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"); 

    参考自:https://blog.csdn.net/yangkai_hudong/article/details/25130555

    一下内容来自参考:

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     第一种:传入参数仅有数组 
           <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的元素。

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    2,使用hashmap传参

             

    虽然ibatai sql map可以配置多个参数,但sqlMap只能传入一个参数,我们有两种方式,一是把我们的参数封装成一个类,通过set/get取值的方式给sql map注入参数,二是通过hashMap(可以组合一些不是同一个pojo的参数有优势)

    <select id="getPeopleList" resultClass="model.User" parameterClass="java.util.Map">
      <![CDATA[
         select * from test where name like '%$name$%'
      ]]>
    </select>

       Map map=new HashMap();
       map.put("name", "gaoxiang");    key为参数名,value位数据
       List list = sqlMap.queryForList("getPeopleList", map);

    在这里注意ibatis中#和$符号的区别:https://blog.csdn.net/geyouchao/article/details/51817747

    https://blog.csdn.net/kiss_vicente/article/details/7602900

  • 相关阅读:
    C# 全局热键
    Frida hook 初识
    xposed hook 复杂函数参数问题
    C# http post 中文乱码问题
    Fiddler 抓包https 问题
    C# HttpWebRequest 多线程超时问题
    Android Studio 无 Generate signed apk 菜单选项问题
    c#调用c++ dll const char* String类型转换问题。传值,与接收返回值问题
    C++中GB2312字符串和UTF-8之间的转换
    The underlying connection was closed: An unexpected error occurred on a send
  • 原文地址:https://www.cnblogs.com/lirenhe/p/9774448.html
Copyright © 2011-2022 走看看