学习myBatis批量删除的时候遇到的问题。
JDK版本:8
Mapper:
public void deleteByIds(List<Integer> ids);
xml:
<delete id="deleteByIds">
delete from emp where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
<!--collection="遍历集合" item="元素" separator="分隔符" open="开始前拼接的字符" close=")"-->
#{id}
</foreach>
</delete>
测试:
@Test
public void testDeleteByIds() {
List<Integer> ids = Arrays.asList(13,14,15);
empMapper.deleteByIds(ids);
}
报错:找不到ids
解决方法:
方法一:
sql语句中collection中ids改成list
xml:
<delete id="deleteByIds">
delete from emp where id in
<foreach collection="list" item="id" separator="," open="(" close=")">
<!--collection="遍历集合" item="元素" separator="分隔符" open="开始前拼接的字符" close=")"-->
#{id}
</foreach>
</delete>
方法二:
Mapper中 参数前面加@Param
Mapper:
public void deleteByIds(@Param("ids") List<Integer> ids);
原因:
老版本。
Java 编译器会擦除泛型信息,导致在运行时无法获取参数的具体类型和名称。