mybatis 根據多個id查詢資料 foreach標籤

鍵盤俠007發表於2018-08-03
 //根據裝置多個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種情況: 

    1. 如果傳入的是單引數且引數型別是一個List的時候,collection屬性值為list .
    2. 如果傳入的是單引數且引數型別是一個array陣列的時候,collection的屬性值為array .
    3. 如果傳入的引數是多個的時候,我們就需要把它們封裝成一個Map了,當然單引數也可以封裝成map,實際上如果你在傳入引數的時候,在MyBatis裡面也是會把它封裝成一個Map的,map的key就是引數名,所以這個時候collection屬性值就是傳入的List或array物件在自己封裝的map裡面的key.

相關文章