У меня есть следующий код SQL, написанный в MyBatis:
<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 (), MyBatis не может правильно отобразить параметры (хотя исключение не выдается) :
List<String> sourceIDList = Arrays.asList("US", "UK");
Но, если я 'm создав список через Constructor, все работает нормально:
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 хочет именно этот формат?