当前位置: 首页 > news >正文

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

问题描述:

想要实现这个接口,同时传入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>

成功了

在这里插入图片描述

相关文章:

  • 学期计划大二上
  • 利士策分享,克服生活中的困难:走好勇攀高峰的每一步
  • kitti数据点云velo坐标转像素坐标与点云深度值计算方法与教程(代码实现)
  • 【AIGC】探索超凡记忆:SuperMemory,你的私人智能书签助手!
  • MySQL——视图(三)应用实例——视图的应用
  • 声学气膜:专利守护与创新力量,不容侵权—轻空间
  • 华为OD机试真题 - 抢7游戏(Python/JS/C/C++ 2024 D卷 100分)
  • 间隙锁对数据库并发性能的影响
  • 扑捉一只耿鬼(HTML文件)
  • blender云渲染来了,blender云渲染教程!
  • Java面试题总结-基础和框架-面试题一
  • 微课录制技巧|高效录制微课的方法,如何高效录制微课?
  • 数据库设计中的需求分析
  • 第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)
  • 大模型之三十-语音合成TTS(coqui)
  • 学习node.js十三,文件的上传于下载
  • Spring框架的核心模块有哪些
  • Python 调用手机摄像头
  • JavaScript(进阶篇)
  • 《浔川社团一周总结(第一周)》——浔川社团官方
  • 四个“从未如此”使巴以加沙战火绵延时间创下历史之最
  • 当番茄霸总遇上晋江古言,短剧IP小变局
  • 证券时报:中美互降关税落地,订单集中补发港口将迎高峰期
  • 知名猎头公司创始人兼首席执行官庄华因突发疾病逝世,享年62岁
  • 在稳市场稳预期下,投资者教育给了散户更多底气
  • 中哥两国元首共同见证签署《中华人民共和国政府与哥伦比亚共和国政府关于共同推进丝绸之路经济带和21世纪海上丝绸之路建设的合作规划》