我遇到的问题是需要在Mybatis中传入一个Session取到的name和批量更新的id,用的是第三种封装Map的方法实现

最后附上自己的代码

MyBatis的foreach语句详解

       foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:
    1:如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
    2:如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
    3:如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key 。
下面分别来看看上述三种情况的示例代码:
1.单参数List的类型:  
    <select id="dynamicForeachTest" resultType="Blog">  
        select * from t_blog where id in  
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">  
            #{item}  
        </foreach>  
    </select>  
上述collection的值为list,对应的Mapper是这样的  
public List<Blog> dynamicForeachTest(List<Integer> ids);  
测试代码:  
    @Test  
    public void dynamicForeachTest() {  
        SqlSession session = Util.getSqlSessionFactory().openSession();  
        BlogMapper blogMapper = session.getMapper(BlogMapper.class);  
        List<Integer> ids = new ArrayList<Integer>();  
        ids.add(1);  
        ids.add(3);  
        ids.add(6);  
        List<Blog> blogs = blogMapper.dynamicForeachTest(ids);  
        for (Blog blog : blogs)  
            System.out.println(blog);  
        session.close();  
    }  
2.单参数array数组的类型:  
    <select id="dynamicForeach2Test" resultType="Blog">  
        select * from t_blog where id in  
        <foreach collection="array" index="index" item="item" open="(" separator="," close=")">  
            #{item}  
        </foreach>  
    </select>  
上述collection为array,对应的Mapper代码:  
public List<Blog> dynamicForeach2Test(int[] ids);  
对应的测试代码:  
    @Test  
    public void dynamicForeach2Test() {  
        SqlSession session = Util.getSqlSessionFactory().openSession();  
        BlogMapper blogMapper = session.getMapper(BlogMapper.class);  
        int[] ids = new int[] {1,3,6,9};  
        List<Blog> blogs = blogMapper.dynamicForeach2Test(ids);  
        for (Blog blog : blogs)  
            System.out.println(blog);  
        session.close();  
    }  
3.自己把参数封装成Map的类型  
    <select id="dynamicForeach3Test" resultType="Blog">  
        select * from t_blog where title like "%"#{title}"%" and id in  
        <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">  
            #{item}  
        </foreach>  
    </select>  
上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:  
public List<Blog> dynamicForeach3Test(Map<String, Object> params);  
对应测试代码:  
    @Test  
    public void dynamicForeach3Test() {  
        SqlSession session = Util.getSqlSessionFactory().openSession();  
        BlogMapper blogMapper = session.getMapper(BlogMapper.class);  
        final List<Integer> ids = new ArrayList<Integer>();  
        ids.add(1);  
        ids.add(2);  
        ids.add(3);  
        ids.add(6);  
        ids.add(7);  
        ids.add(9);  
        Map<String, Object> params = new HashMap<String, Object>();  
        params.put("ids", ids);  
        params.put("title", "中国");  
        List<Blog> blogs = blogMapper.dynamicForeach3Test(params);  
        for (Blog blog : blogs)  
            System.out.println(blog);  
        session.close();  
    } 

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

接口 :    
controller层:
xml :        

Mybatis 传参问题相关推荐

  1. mybatis传入数组怎么写_推荐的MyBatis传参方式List、数组等

    MyBatis 推荐的传参方式 如果要详细的学习 MyBatis,推荐看这个教程:https://www.w3cschool.cn/mybatis/ 1. 单个参数//接口方法int getAgeBy ...

  2. mybatis传参问题总结

    一. 传入单个参数 当传入的是单个参数时,方法中的参数名和sql语句中参数名一致即可 List<User> getUser(int id);<select id="getU ...

  3. mybatis 传参是 liststring 的注意事项

    <!--付款 批量 修改账单状态--><update id="editbillpayALL" parameterType="java.util.List ...

  4. mybatis传参为map的写法

    接口方法是这样的 XxlJobInfo getInfoByParameters(@Param("param") Map<String, String> param); ...

  5. mybatis java传参_[Java教程]Mybatis批量和传参

    [Java教程]Mybatis批量和传参 0 2014-07-31 04:00:12 MyBatis中批量插入 方法一: resultType="java.lang.String" ...

  6. mybatis中#{}和${}传参的区别

    最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别,  使用#传入参数是,sql语句解析是会加上"&qu ...

  7. MyBatis框架 传参、事务、缓存(二级)

    传参 在mapper.xml文件中的标签中的parameterType可以可控制参数 传入参数的方法: sSession.select("虚拟包.id", 参数列表); SQL语句 ...

  8. MyBatis复习(四):#{}占位符与SQL传参

    参数类型 1. MyBatis的parameterType参数类型可以是基本数据类型.String.包装类型.java.util.Map.java.util.LinkHashMapd等 ${}和#{} ...

  9. mybatis的mapper接口与xml传参问题

    本文来说下mybatis的mapper接口与xml传参问题 文章目录 单个基础数据类型的传参 多个基础数据类型的传参 单个javabean 多个javabean 单个基础数据类型的传参 也就是说,接口 ...

  10. MyBatis获取参数值的两种方式以及传参情况

    MyBatis获取参数值的两种方式 MyBatis获取参数值的两种方式:${}和#{} 传参情况 演示环境 1.单个字面量类型的参数 2.多个字面量类型的参数 3.map集合类型的参数 4.实体类类型 ...

最新文章

  1. 计算机网络知识点1——计算机网络概述
  2. 10.4 route:显示或管理路由表
  3. engagement center的session.connect
  4. 问题步骤记录器——“懒教师”的好帮手
  5. 我们为什么使用Node
  6. net 去掉第一位和最后一位_本赛季英超门将的扑救成功率,第一位和最后一位竟来自同家俱乐部...
  7. 巩膜:论文翻译《一种改进的眼角检测算法》An Improved Algorithm for Eye Corner Detection
  8. SQL Server中的查询优化技术:数据库设计和体系结构
  9. EVE-NG之Cisco FirePower 系统
  10. (秒杀项目) 4.5 项目部署与压测
  11. 睡后收益 -- CSDN博客打赏功能及自定义模块以及代码分享
  12. 颜宁谈为何选择深圳:一拍即合!我麻溜地向普林斯顿递了辞职申请
  13. Docker之Dockerfile原理
  14. 新版本GPU加速的tensorflow库的配置方法
  15. Pycharm Professional Edition 激活码(license),有效期至2018年01月30日
  16. java 汽车加油问题_贪心算法 汽车加油问题 | 学步园
  17. HTTP之(二)HTTP协议简介
  18. 软件构造复习小结(2)——设计规约(Specification)
  19. 关于MNN中图像预处理
  20. 【备忘】达内2017Java全套最新价值2万元视频教程

热门文章

  1. 备忘:BLOCK CORRUPTION IN SYSTEM DATAFILE
  2. 返回字符串AText的ACount个复本
  3. HDU10月月赛总结
  4. 20191201每日一句
  5. 190514每日一句
  6. 181219每日一句
  7. Atitit gui的实现模式文本 dom ast 像素绘图api native 目录 1. Pl ast xml domAst 1 1.1. 简介 1 1.1.1. 【具体语法树】 2 2.
  8. Atitit json array to csv 目录 1. Lib 1 1.1. Apache csv lib 1 1.2. Org.json.jar cdl模式 1 2. other 1 2
  9. Atitit 提升用户体验 生物识别 与登录 身份验证
  10. atitit 国家与社区发展战略研究attilax 总结 v2 .docx