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
相关产品推荐
相关产品推荐

