我正在尝试使用Mybatis foreach功能将对象列表插入Oracle数据库中的单个表。
例如,我有一个表'Test_A',它有一个可空的VARCHAR列'Description'。
我将一个字符串列表传递给mybatis方法,其映射器如下所示。
<insert id = "testMultipleInserts" parameterType="java.util.List">
Insert All
<foreach collection="list" item="element" index="index">
Into Test_A (Description) values (#{element.description})
</foreach>
select * from dual
</insert>
当我调用上述方法时,它会将以下查询打印到日志
Insert All Into Test_A (Description) values (?) Into Test_A (Description) values (?) Into Test_A (Description) values (?) select * from dual
我希望按照Oracle方言使用正确的语法(我从SQL浏览器执行,这可行)
但是从提供给方法的List参数中读取列表元素似乎存在一些问题。我得到一个例外,如下所示。
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter '__frch_element_0' not found. Available parameters are [list]
答案 0 :(得分:0)
我对您正在尝试的查询一无所知,但堆栈跟踪明确指出其参数问题会将parameterType从java.util.List
更改为list
<insert id = "testMultipleInserts" parameterType="list">
Insert All
<foreach collection="list" item="element" index="index">
Into Test_A (Description) values (#{element.description})
</foreach>
select * from dual
</insert>