首页 > 解决方案 > 为什么 MyBatis 不识别 Arrays.asList()?

问题描述

我有以下用 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中对应的mapper类是:

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

现在,在调用者类中,如果我通过 Arrays.asList() 创建列表,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 想要那种特殊的格式?

标签: javaarraysmybatis

解决方案


推荐阅读