Mybatis 动态 SQL 对一个集合进行遍历foreach的使用

http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach元素的属性主要有 item,index,collection,open,separator,close。

    item表示集合中每一个元素进行迭代时的别名,
    index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
    open表示该语句以什么开始,
    separator表示在每次进行迭代之间以什么符号作为分隔符,
    close表示以什么结束。

    foreach使用collection属性有三种情况:

    1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
    2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
    3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key 。

 //可变数组
    public List<Userinfos> getUserArray(Integer...rids);

   //list
    public List<Userinfos> getUserArrayList(List<Integer> rids);
    
    //Map
    public List<Userinfos> getUserArrayMap(Map<String,Object> rids);

     1.单参数array数组的类型

    <!--array-->
    <select id="getUserArray" resultType="Userinfos">
         select * from userinfos  where userRole in
         <foreach collection="array" item="rids"  open="(" separator="," close=")">
                #{rids}
         </foreach>
    </select>

 

     2.单参数List的类型

 

 <!--list-->
    <select id="getUserArrayList" resultType="Userinfos">
        select * from userinfos  where userRole in
        <foreach collection="list" item="rids"  open="(" separator="," close=")">
            #{rids}
        </foreach>
    </select>

 

     3.自己把参数封装成Map的类型


    <!--collection的值为ids,是传入的参数Map的key
     map.put("inss",inss);
    -->
    <select id="getUserArrayMap" resultType="Userinfos">
        select * from userinfos  where userRole in
        <foreach collection="inss" item="rids"  open="(" separator="," close=")">
            #{rids}
        </foreach>
    </select>

 测试:

 private static void all3() {
        SqlSession session = MyBatisUtil.createSession();

        //获得mapper接口
        UsersMapper mapper = session.getMapper(UsersMapper.class);

        //调用方法
        List<Userinfos> list = null;
        try {
            
            //array
//            list = mapper.getUserArray(1,2);
            
            //list
//             List<Integer> ins =Arrays.asList(1,3);
//             list = mapper.getUserArrayList(ins);

            //map
            Map<String,Object> map =new HashMap<>();
            //注意是个集合哦!
            List<Integer> inss = Arrays.asList(1,2);
            //map中存放的Value是集合
            map.put("inss",inss);

            list = mapper.getUserArrayMap(map);

            for (Userinfos user : list
            ) {
                System.out.println(user);
            }

            MyBatisUtil.closeSession(session);
        } catch (Exception e) {
            e.printStackTrace();
        }
//

    }

效果:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值