java - 为什么 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 想要那种特殊的格式?
解决方案
推荐阅读
- c# - ASP.NET Core Web API 错误请求
- python - 尝试从站点打印 HREF 标记并得到奇怪的结果
- java - 使用 EntityGraph 时 DTO 会导致 QueryException
- c# - 在一个应用程序中合并两个 Asp.Net Core API
- javascript - 没有流程的 React Native?
- dependency-injection - 在 NestJS 中,如何将动态模块异步选项注入模块内部导入?
- sql - 重构 Oracle 存储过程以使用 BULK COLLECT
- masstransit - MassTransit 端点名称在 ConsumerDefinition 中被忽略
- python - selenium.common.exceptions.WebDriverException:消息:即使更新后也无法访问 chrome
- angular - 在后端渲染 ApexCharts PNG 文件?