-
//根據設備多個id獲取設備信息
-
public List<Devices> getDevicesAll(@Param("devicesIds") String[] devicesIds);
-
-
-
-
< select id="getDevicesAll" resultMap="BaseResultMap">
-
select
-
<include refid= "Base_Column_List"/>
-
from sys_devices d
-
where
-
d.devices_id in
-
< foreach item="devices_id" index="index" collection="devicesIds"
-
open= "(" separator="," close=")">
-
-
</ foreach>
-
<!-- < where>
-
< if test="devicesIds != null">
-
d.devices_id in
-
< foreach item="item" index="index" collection="array"
-
open= "(" separator="," close=")">
-
-
</ foreach>
-
</ if>
-
</ where> -->
-
</ select>
用param標簽
-
//根據主鍵ID刪除一條記錄
-
int deleteCategory( String[] categoryId);
-
-
-
<!-- 根據主鍵刪除一條記錄 -->
-
<delete id="deleteCategory">
-
delete from category
-
where Category_ID in
-
<foreach item="item" index="index" collection="array" open="(" separator="," close=")">
-
#{item}
-
</foreach>
-
</delete>
這兩種方式
下面是其他的方式
在MyBatis傳入List參數時,MyBatis報錯:nested exception is org.apache.ibatis.binding.BindingException: Parameter 'idList' not found. Available parameters are [collection, list]","request_id":"fe7f7f815c1995a6015c1a22c2540234"}
以下是相關代碼:
Mapper.java--
mapper.xml
解決方案:
修改Mapper.java:
或
修改mapper.xml
原因:
foreach元素的屬性主要有item,index,collection,open,separator,close。item表示集合中每一個元素進行迭代時的別名,index指定一個名字,用於表示在迭代過程中,每次迭代到的位置,open表示該語句以什么開始,separator表示在每次進行迭代之間以什么符號作為分隔符,close表示以什么結束,在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,主要有一下3種情況:
-
- 如果傳入的是單參數且參數類型是一個List的時候,collection屬性值為list .
- 如果傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值為array .
- 如果傳入的參數是多個的時候,我們就需要把它們封裝成一個Map了,當然單參數也可以封裝成map,實際上如果你在傳入參數的時候,在MyBatis里面也是會把它封裝成一個Map的,map的key就是參數名,所以這個時候collection屬性值就是傳入的List或array對象在自己封裝的map里面的key.