mybatis+mysql下批量插入一些问题,在这里记录一下,如下错误信息:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter '__frch_item_0' not found. Available parameters are [collection, list]
原代码如下:
<insert id="insertList" parameterType="java.lang.String">
insert into j_sbcl (DWDM, SXBBH, SBLSH_SHORT, SBLSH, WJLX, CLLX, CLSL, ATTACH_NAME, ATTACH_ID,
SAVE_TYPE, ATTACH_SIGN, ATTACH_TYPE, ATTACH_PATH, STUFF_SEQ, CLMC, SLBMZZJGDM, XZQHDM, VERSION, REC_FLAG,
D_ZZJGDM, BZ, BYZD,CLZT)
values
<foreach collection="list" index="index" item="item" separator=",">
(#{item.dwdm,jdbcType=VARCHAR}, #{item.sxbbh,jdbcType=FLOAT}, #{item.sblshShort,jdbcType=VARCHAR},
#{item.sblsh,jdbcType=VARCHAR}, #{item.wjlx,jdbcType=INTEGER}, #{item.cllx,jdbcType=INTEGER},
#{item.clsl,jdbcType=VARCHAR}, #{item.attachName,jdbcType=VARCHAR}, #{item.attachId,jdbcType=VARCHAR},
#{item.saveType,jdbcType=VARCHAR}, #{item.attachSign,jdbcType=VARCHAR}, #{item.attachType,jdbcType=VARCHAR},
#{item.attachPath,jdbcType=VARCHAR}, #{item.stuffSeq,jdbcType=VARCHAR}, #{item.clmc,jdbcType=VARCHAR},
#{item.slbmzzjgdm,jdbcType=VARCHAR}, #{item.xzqhdm,jdbcType=VARCHAR}, #{item.version,jdbcType=VARCHAR},
1, #{item.dZzjgdm,jdbcType=VARCHAR}, #{item.bz,jdbcType=VARCHAR}, #{item.byzd,jdbcType=VARCHAR},#{item.clzt,jdbcType=VARCHAR})
</foreach>
</insert>
后网上查阅资料,按以下两个步骤排查:
- 查看parameterType的类型是不是java.util.List类型,如果是的话,看 foreach 的collection属性是不是list.
- 看一下foreach里面的属性是否写错或有没有传递进来
根据这两点都没查出来,关于第一个步骤其实可以使用parameterType=”java.lang.String” 入参类型,最后使用最笨的办法,一个一个参数加进去测试,最后发现加到某两个字段时就报错了,仔细检查原来是这两个字段已经在domain里注释掉了,换句话说对象就没有这两个属性,所以报了这个错。
已经注释掉的两个字段:
//private String clzt;
//private String clsj;