当前位置: 代码网 > it编程>编程语言>Java > 解决Mybatis mappe同时传递 List 和其他参数报错的问题

解决Mybatis mappe同时传递 List 和其他参数报错的问题

2024年09月11日 Java 我要评论
问题描述:想要实现这个接口,同时传入planid和projectplans,屡次报错。好在一路坎坷,解决了多方bug,最后终于搞定了 void insertlist(@param("planid")

问题描述:

想要实现这个接口,同时传入planid和projectplans,屡次报错。好在一路坎坷,解决了多方bug,最后终于搞定了

 void insertlist(@param("planid") integer planid, @param("projectplans") list<projectplan> projectplans);

1 刚开始爆绑定失败

后来发现原来是我的xml文件没有写mapper后缀

2 多个参数传值用@param失败

别人说用这个,但是发现根本不行,

    void insertlist(@param("planid") integer planid, @param("projectplans") list<projectplan> projectplans);
  <insert id="insertlist"  parametertype="java.util.map">
       insert into nursing_project_plan (plan_id,project_id,execute_time,execute_cycle,
       execute_frequency,create_by, update_by, create_time, update_time,remark) values
       <foreach collection="projectplans" item="project" separator=",">
           (#{planid},#{project.projectid},#{project.executetime},#{project.executecycle},
           #{project.executefrequency},#{project.createby},#{project.updateby},#{project.createtime},#{project.updatetime},#{project.remark}
           )
       </foreach>
   </insert>

解决思路

报错信息

org.mybatis.spring.mybatissystemexception: nested exception is org.apache.ibatis.binding.bindingexception: parameter 'customeridlist' not found. available parameters are [arg0, collection, list]
解释:

解释:
当我们传递一个 list 实例或者数组作为参数对象传给 mybatis。当你这么做的时候,mybatis 会自动将它包装在一个 map 中,用名称在作为键。list 实例将会以list 作为键,而数组实例将会以array作为键。所以,当我们传递的是一个list集合时,mybatis会自动把我们的list集合包装成以list为key值的map。

错误代码:
mapper层

 void insertlist(list<projectplan>projectplans );
//这个方法也是会错 void insertlist(list<projectplan>projectplans ,integer planid);

xml层

   <insert id="insertlist"  >
       insert into nursing_project_plan (plan_id,project_id,execute_time,execute_cycle,
       execute_frequency,create_by, update_by, create_time, update_time,remark) values
       <foreach collection="projectplans" item="project" separator=",">
           (#{planid},#{project.projectid},#{project.executetime},#{project.executecycle},
           #{project.executefrequency},#{project.createby},#{project.updateby},#{project.createtime},#{project.updatetime},#{project.remark}
           )
       </foreach>
   </insert>

解决方法

service层
(封装成map)

  map maps = new hashmap();
        maps.put("projectplans", projectplans);
        maps.put("planid", 2);
        nursingprojectplanmapper.insertlist(maps);

mapper层

void insertlist( map maps);

xml层

    <insert id="insertlist" parametertype="java.util.map">
        insert into nursing_project_plan (plan_id,project_id,execute_time,execute_cycle,
        execute_frequency,create_by, update_by, create_time, update_time,remark) values
        <foreach collection="projectplans" item="project" separator=",">
            (#{planid},#{project.projectid},#{project.executetime},#{project.executecycle},
            #{project.executefrequency},#{project.createby},#{project.updateby},#{project.createtime},#{project.updatetime},#{project.remark}
            )
        </foreach>
    </insert>

成功了

在这里插入图片描述

到此这篇关于解决mybatis mappe同时传递 list 和其他参数报错的问题的文章就介绍到这了,更多相关mybatis mappe传递 list 报错内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com