一次在做批量更新数据的时候报错 Parameter '__frch_item_0' not found. Available parameters are [list] 记过反复查找,最后才发现是一个字段的字母小写了。
下面给大家提供一个实例:
xml:这里说明一下这个sql的意思是根据h_code去更新h_clientA的值
<update id="updateHards" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="" close="" separator=";"> update hard <set> <if test="item.h_clientA !=null"> h_clientA = #{item.h_clientA,jdbcType=VARCHAR} </if> <if test="item.h_clientB !=null"> h_clientB = #{item.h_clientB,jdbcType=VARCHAR} </if> <if test="item.h_clientC !=null"> h_clientC = #{item.h_clientC,jdbcType=VARCHAR} </if> </set> where h_code = #{item.hCode,jdbcType=VARCHAR} </foreach> </update>
dao:
int updateHards(List<Hard> list);
controller:
List<Hard> hards = new ArrayList<Hard>(); for (int i = 0; i < split.length; i++) { Hard hard = new Hard(); switch (client.getClient_level()) { case 2: hard.setH_clientB(h_client); break; case 3: hard.setH_clientC(h_client); break; } hard.sethCode(split[i]); hards.add(hard); } // 3.进行操作,并返回 int updateHards = hardManageService.updateHards(hards);
相关的错误信息:
1.查看parameterType的类型是不是java.util.List类型,如果是的话,看foreach 的collection属性是不是list,
因为 传递一个 List 实例或者数组作为参数对象传给 MyBatis,MyBatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键
2.看一下foreach里面的值有没有传递进来
3.看foreach里面的名称字段是否写错
4.还有就是我用Mybatis的时候,用mysql的值插入自动增长值,里面的key我在数据库中没有设置自动增长,然后我又用了selectkey,所以也会出现这种情况
如有需要可以加我Q群【308742428】大家一起讨论技术。
后面会不定时为大家更新文章,敬请期待。
喜欢的朋友可以关注下。