我有以下用MyBatis编写的SQL代码:

<select id="getItems" resultMap="someMap">
        SELECT *
        FROM my_table
        WHERE item_id = #{itemID}
        AND source_id IN
        <foreach item="sourceID" index="index" collection="sourceIDList"
            open="(" separator="," close=")">
              #{sourceID}
        </foreach>
    </select>

Java中相应的映射器类是:

public interface ItemMapper
{
    List<ItemDO> getItems(
        @Param("itemID") String itemID,
        @Param("sourceIDList") List<String> sourceIDList);
}

现在,在调用者类中,如果我通过Arrays.asList()创建List,MyBatis无法正确映射参数(但是,不会抛出异常):

List<String> sourceIDList = Arrays.asList("US", "UK");

但是,如果我通过构造函数创建列表,一切正常:

List<String> sourceIDList = new ArrayList<>();
sourceIDList.add("US");
sourceIDList.add("UK");

在日志中,我可以看到Array.asList()的情况:

Parameters: Item1(String), US, UK(String)

然而,对于第二种情况,它就像:

Parameters: Item1(String), US(String), UK(String)

我知道 Arrays.asList() 创建的相应对象不属于 java.util.ArrayList 类 . 但是,我很好奇MyBatis为什么要这种格式?