mybatis in查询

foreach 在SQL语句的in中,可以迭代一个集合。

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

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

使用foreach 时候,要注意collection属性的使用不能出错。不同情况下,该属性值不一样。而且改属性是指定的。

一:传入的是单参数且参数类型是一个List的时候。 collection=”list”;
二:传入的是但参数且参数类型是一个array数组时候,collection =”array”;
三:传入参数是多个的时候,我们需要他们封装成Map,这时候collection属性值就是Map中的key。如下代码示例:
(Map,一种存储数据的存储方式,以键值对的方式存储)

1.单参数List类型:

<select id="findUsersById"  resultType="com.dmsdbj.integral.kernel.entity.ext.GivingIntegralModel">
        SELECT id,user_name,giving_integral
        FROM tik_user
        WHERE id IN
        <foreach collection="list" index="index" item="item" open="( " separator=" , " close=" )">
            #{item}
        </foreach>
    </select>

测试代码(理论对的,直接运行不可正确执行):

public List<GivingIntegralModel> test(){
    list list =new ArrayList();
    list.add(1);
    list.add(2);
    list.add(3);
    List<GivingIntegralModel> res= UseMap.findUsersById(list);
    return res;
}

2.单参数array数组类型:

 <select id="test2Array" parameterType="java.util.ArrayList" resultType="Blog">
     select * from 
     tik_user 
     where id in
     <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
          #{item}
     </foreach>
 </select>  

测试代码(理论对的,直接运行不可正确执行):

public void test() {      
          int[] ids = new int[] {1,3,6,9};
          List blogs = UseMap.test2Array(ids);
          ....(后面代码省略)
 }

3.封装成Map的类型:

<select id="test3Map" 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>

测试代码(理论对的,直接运行不可正确执行):

public void test(){
    List ids = new ArrayList();
        ids.add(1);
        ids.add(2);
        ids.add(3);
    Map params = new HashMap();
    params.put("ids", ids);
    params.put("title", "中国");
    List blogs = UseMap.test3Map(params);
    ....(后面代码省略)
}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值