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. Light OJ 1011

    题意: (好难看) 给你 N 个 男的, 女的, 男的选女票, 题目给出矩阵, Mp[i][j] 表示 第 i 个男的选 第 J 个女的优先值 选了 J 之后的就不能选 J 了: 求所有狗男女的最大优 ...

  2. 实体类和json互相转换

    /// <summary> /// 将实体类转换为json数据 /// </summary> /// <returns></returns> publi ...

  3. 二进制补码除法——计算机底层整数除法模拟之Java实现

    前面讲到布思算法的计算机底层模拟的时候,我们是借助于一个可以储存.表示任意N位的二进制补码的BinaryQueue实现的,现在我们模拟计算机底层整数除法还是要借助于它: BinaryQueue类代码: ...

  4. java基础编程题练习(一)

    1.编程实现用户输入4个整数,按从大到小的顺序排列输出. 思路:将输入的数据存入数组,使用冒泡排序对数组数据进行排序后输出数组 冒泡排序的代码如下: import java.util.Scanner; ...

  5. Confluence 6 用户宏示例 - Formatted Panel

    下面的用演示了如果还写一个用户宏,并在这个宏中创建一个格式化的面板,并且指定颜色.将会创建下面的面板: (Title)   注意:这个面板的标题为空,如果你没有给这个面板标题参数的话. Macro n ...

  6. Swift 新增fileprivate 详解

    以前项目中只要用了private  那么在同一个文件同一个类中还是能访问的(比如一个类中写了一个extension) swift3.0现在不行了 新增了一个fileprivate 的访问控制 以前的p ...

  7. 三.linux磁盘与文件系统

    第一层 机械硬盘 和 固态硬盘 结构 接口 机械硬盘stat.sas 固态pci-e .nvme也叫m2 硬盘的选择 磁盘内部组成 计算硬盘的大小 命令 fdisk  -l 显示下面信息 大小=扇区大 ...

  8. Redis扩展

    Redis扩展下载地址:https://windows.php.net/downloads/pecl/releases/redis/ PHP怎么安装redis扩展 http://www.php.cn/ ...

  9. java----java工具类

    System: Runtime: Random: Scanner: Arrays: MessageFormat: Math: 日期: Comparable: cloneable接口: 数字处理: MD ...

  10. MySQL源码安装一键脚本

    #红色部分根据自己的需求来定义#!/bin/bash #卸载系统自带的Mysql /bin/rpm -e $(/bin/rpm -qa | grep mysql|xargs) --nodeps /bi ...