mybatis相关问题,<foreach>标签

其中的collection标签后面跟的是啥,类型?还是名字?这个是要怎么填的?和接口方法中的参数名及类型有啥关系,我查到的是还可以在接口方法中添加@Param,说是这样里面的值就要和collection的值一致?查阅了不少,一直在测试,一直报错,

img


sql语句

<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里面

img

https://ask.csdn.net/questions/710103?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164696731016780269890129%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fask.%2522%257D&request_id=164696731016780269890129&biz_id=4&utm_medium=distribute.pc_search_result.none-task-ask_topic-2~ask~first_rank_ecpm_v1~ask_rank-2-710103.pc_ask&utm_term=%3Cforeach%3E&spm=1018.2226.3001.4187


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>