You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mybatis批量删除报错Type handler not found问题求助

问题原因

你传入DAO的参数是List<TaskDTO>类型的集合,Mybatis在遍历这个List的时候,<foreach>标签的item属性对应的是集合中的每一个TaskDTO对象,你这里把item命名为taskid后,直接写#{taskid},Mybatis会尝试把整个TaskDTO对象作为参数传入SQL,但是Mybatis没有内置针对自定义TaskDTO类和数据库字段对应的类型处理器,所以抛出了找不到Type handler的异常。

解决方案

有两种常用解决方式,选其中一种即可:

方案1:修改Mapper XML中的取值逻辑

调整foreach的item命名,明确取对象的taskid属性:

<delete id="deleteTaskScheduling" parameterType="List">
    DELETE FROM ct_task_scheduling WHERE taskid IN
    <foreach collection="list" item="taskDTO" open="(" close=")" index="index" separator=",">
        #{taskDTO.taskid}
    </foreach>
</delete>

方案2:传入参数时提前提取taskid集合

调用DAO层前把List<TaskDTO>里的taskid提取为String类型的集合再传入,原有Mapper无需修改:

List<TaskDTO> taskDTOs = new ArrayList<>();
// ... 原有赋值逻辑
List<String> taskIdList = taskDTOs.stream().map(TaskDTO::getTaskid).collect(Collectors.toList());
taskDAO.deleteTaskScheduling(taskIdList);

内容的提问来源于stack exchange,提问作者AppleT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:12:00