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

ibatis 多种传参方式的更多相关文章

  1. PHP四种传参方式

    test1界面: <html> <head> <title>testPHP</title> <meta http-equiv = "co ...

  2. python 计算机发展史,线程Process使用 for循环创建 2种传参方式 jion方法 __main__的解释

    ########################总结################## #一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬 ...

  3. Vue中router两种传参方式

    Vue中router两种传参方式 1.Vue中router使用query传参 相关Html: <!DOCTYPE html> <html lang="en"> ...

  4. axios的各种传参方式

    axios的各种传参方式 1. params方式 axios({ url: '/users', method: 'get', params: { id: '11111', name: '22222' ...

  5. vue param和query两种传参方式

    1.传参方式 query传参方式 this.$router.push({ path: "/home", query: {code:"123"} }) param ...

  6. 浅谈C++三种传参方式

    浅谈C++三种传参方式 C++给函数传参中,主要有三种方式:分别是值传递.指针传递和引用传递. 下面通过讲解和实例来说明三种方式的区别. 值传递 我们都知道,在函数定义括号中的参数是形参,是给函数内专 ...

  7. Mybatis的几种传参方式,你了解吗?

    持续原创输出,点击上方蓝字关注我 目录 前言 单个参数 多个参数 使用索引[不推荐] 使用@Param 使用Map POJO[推荐] List传参 数组传参 总结 前言 前几天恰好面试一个应届生,问了 ...

  8. vector作为参数的三种传参方式

    c++中常用的vector容器作为参数时,有三种传参方式,分别如下(为说明问题,用二维vector): function1(std::vector<std::vector<int> ...

  9. vue的三种传参方式

    <template> <div> <router-link :to="{'name':'x',params:{'type':'users'}}"> ...

随机推荐

  1. Laravel资源理由器跟隐式控制的对比及是怎样的吧?- Route::resource vs Route::controller

    stackoverflow找到的问题:http://stackoverflow.com/questions/23505875/laravel-routeresource-vs-routecontrol ...

  2. 如何在Mac 终端上Git 项目的一次常规操作

    首先,Git的工作流是怎样的? 你的本地仓库由 git 维护的三棵“树”组成. 第一个是你的 工作目录,它持有实际文件: 第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动: 最后是 H ...

  3. @ModelAttribute设置request、response、session对象

    利用spring web提供的@ModelAttribute注解 放在类方法的参数前面表示引用Model中的数据 @ModelAttribute放在类方法上面则表示该Action类中的每个请求调用之前 ...

  4. iOS10 远程通知需要有entitlements的支持

    今天测试远程通知,发现ios9上可以收到,但是ios10上无法收到,原来是忘记开下面这个选项了: 这样看来iOS9 对这个entitlement没有什么依赖,但是10却是必须打开的!

  5. python-异常处理、元类

    一.异常处理 1.异常处理介绍: 异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常没有被应用程序处理,那么该异常就会被抛出来,程序执行随之停止 2.异常通常包含三个部分 1.traceb ...

  6. SQL Server 函数之日期格式化函数

    SQL Server 函数之日期格式化函数 高文龙关注0人评论612人阅读2017-09-23 13:47:07 SQL Server 函数之日期格式化函数 对于一些经常写SQL Server执行语句 ...

  7. Confluence 6 Windows 中以服务方式自动重启修改运行服务的用户

    基于安全的考虑,如果你希望你的 Confluence 不是在系统中以管理员的身份运行或者你使用网络驱动器来存储备份,附件和索引的话,你可以以其他用户来运行 Confluence. 希望修改用户,打开 ...

  8. Rational Rose 2007下载、安装和破解

    一.文件下载 (1)DAEMON Tools Lite(虚拟光驱)下载地址 链接:https://pan.baidu.com/s/19L1FT6T1MlyhkfXyobd26A 提取码:drfs (2 ...

  9. LeetCode(115):不同的子序列

    Hard! 题目描述: 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字 ...

  10. laravel 实现一个简单的 RESTful API

    创建一个 Article 资源 php artisan make:resource Article 你可以在 app/Http/Resources 目录下看到你刚刚生成的 Article 资源 当然我 ...