Mybatis的批量查詢
阿新 • • 發佈:2018-11-14
官網關於批量查詢語法的介紹:
官網:
背景:
現有一張任務表(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>