Mybatis的批量查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>

猜你喜欢

转载自blog.csdn.net/ycd500756/article/details/83272309