版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ycd500756/article/details/83272309
官网关于批量查询语法的介绍:
官网:
背景:
现有一张任务表(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>