由于MyBatis中@Delete注解在SQL中的语法是通过占位符的方式支持参数绑定,所以在使用#{}传入List类型参数时会默认生成一个单一的问号(?)占位符来代替这个List。但是这里我们要传递的是一个List内的多个ID值,所以当我们执行deleteByIdList方法时,MyBatis会将List作为一个参数处理,并尝试将其绑定到这个单独的占位符上,导致SQL语法错误。因此,为了正确地使用@Delete注解传递List类型参数,需要进行以下两步操作: 1:修改SQL语句,让它匹配List作为参数 @Mapper public interface OssFileMapper { @Delete("<script>" + "DELETE FROM oss_file WHERE id IN " + "<foreach item='id' collection='idList' separator=',' open='(' close=')'>" + "#{id}" + "</foreach>"+ "</script>") void deleteByIdList(List<Long> idList); } 2:使用 这样就可以正确地使用@Delete注解传递List类型参数进行批量删除操作了。