1. 程式人生 > >Mybatis的批量查詢

Mybatis的批量查詢

官網關於批量查詢語法的介紹:
官網:

背景:

現有一張任務表(tb_task),已知任務id列表。需求:根據id查詢對應的任務名稱(name)。
實現:使用Mybatis的批量操作語法。foreach

編碼實現

1.介面定義

 /**
   * 批量獲取任務id列表對應的任務名稱
   * @param taskIdList:任務id列表
   * @return :任務id,及對應的任務名稱的列表資訊
   */
List<Map<String, Object>> batchSelectTaskNameById(List<String>
taskIdList);

2.介面在XML檔案的實現

<select id="batchSelectTaskNameById" parameterType="list" resultType="map">
	SELECT id,name
	FROM tb_task
	WHERE 1=1  AND id IN
	<foreach collection="list" item="item" index="index" open="(" separator="," close=")">
		#{item}
	</foreach>
</select>

遇到的問題

在XMl檔案的sql語句中collection的引數值為list, 而不是介面中定義的taskIdList。如果需要將collection的引數值改為taskIdList 那麼需要在介面中使用@Param註解

否則會出現下面的異常的資訊

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'taskIdList' not found. Available parameters are [collection, list]

修改後介面方法定義如下:

/**
     * 批量獲取任務id列表對應的任務名稱
     * @param taskIdList:任務id列表
     * @return :任務id,及對應的任務名稱的列表資訊
     */
    List<Map<String, Object>> batchSelectTaskNameById(@Param("taskIdList") List<String> taskIdList);

對應的xml實現

<select id="batchSelectTaskNameById" parameterType="list" resultType="map">
	SELECT id,name
	FROM tb_task
	WHERE 1=1  AND id IN
	<foreach collection="taskIdList" item="item" index="index" open="(" separator="," close=")">
		#{item}
	</foreach>
</select>