其中的collection标签后面跟的是啥,类型?还是名字?这个是要怎么填的?和接口方法中的参数名及类型有啥关系,我查到的是还可以在接口方法中添加@Param,说是这样里面的值就要和collection的值一致?查阅了不少,一直在测试,一直报错,
<select id="test_3" parameterType="java.util.ArrayList" resultType="user">
select * from user
<where>
<foreach collection="array" item="age" open="age in (" separator="," close=")"></foreach>
#{age}
</where>
</select>
接口
List<User> test_3(int[] ef);
测试方法
int[] age ={18};
List<User> userList= mapper.test_3(age);
for (User user : userList) {
System.out.println(user.getName());
}
这里是另一组接口(没加@Param)加sql语句,是能输出东西的,它这又是怎么匹配上的,
<select id="test_2" resultType="user" parameterType="java.util.ArrayList">
select * from user
where age in
<foreach collection="array" item="age" index="index" open="(" separator="," close=")">
#{age}
</foreach>
</select>
List<User> test_2(int[] a);
mybatis 对集合数组进行了特殊处理,你看成它把参数封装进一个Map里面,(注意:这是针对参数只有一个,且为数组或者集合这一种情况的)
即
map.put("list",你的list);
map.put("array",你的数组);
它取的时候,是按key来取的。
所以你用int[] age时,collection只认array。
collection里面填入你传入的参数ef, open前面加上index="index" #{age}写到foreach里面
List<User> test_3(@param("ef")int[] ef);
<select id="test_3" parameterType="java.util.ArrayList" resultType="user">
select * from user
<where>
<foreach collection="ef" item="age" open="age in (" separator="," close=")"></foreach>
#{age}
</where>
</select>