学习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 编译器会擦除泛型信息,导致在运行时无法获取参数的具体类型和名称。
本文讲述了在使用myBatis进行批量删除操作时,由于JDK8下Java编译器擦除了泛型信息,导致在List<Integer>ids参数传递时出错。提供了两种解决方案:一是修改XML中的collection为list,二是为Mapper方法参数添加@Param注解以保留泛型信息。
1944

被折叠的 条评论
为什么被折叠?



