mybatis 根據多個id查詢資料 foreach標籤
阿新 • • 發佈:2018-11-07
//根據裝置多個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=")"> #{devices_id} </foreach> <!-- <where> <if test="devicesIds != null"> d.devices_id in <foreach item="item" index="index" collection="array" open="(" separator="," close=")"> #{item} </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.