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);
....(后面代码省略)
}