为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA MyBatis批量操作(插入)时异常

JAVA MyBatis批量操作(插入)时异常

江户川乱折腾 2019-03-22 10:15:15
传入为 List<Object> 确定为不为空org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter '__frch_item_0' not found.<insert id="batchInsert">    insert into    personal_tag(type, tag, create_time, open_account_id)    values    <foreach collection="list" item="item" separator=",">        (#{item.type,jdbcType=INTEGER},        #{item.tag,jdbcType=VARCHAR},        #{item.createTme,jdbcType=TIMESTAMP},        #{item.openAccountId,jdbcType=BIGINT})    </foreach>ON DUPLICATE KEY UPDATE tag=tag</insert>代码如上....确定传入值不为空忘记补充,我的项目里其他地方也有批量插入的代码 , 类似于这个 全部都是正确执行的mybatis ver : 3.3.0
查看完整描述

5 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

此问 关闭 题主没有找到任何答案 靠升级mybatis版本后解决此问题


查看完整回答
反对 回复 2019-04-25
?
繁星coding

TA贡献1797条经验 获得超4个赞

在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。


<insert id="batchInsert">

    insert into

    personal_tag(type, tag, create_time, open_account_id)

    values

    <foreach collection="list" item="item" index="index" separator=",">

        (#{item.type,jdbcType=INTEGER},

        #{item.tag,jdbcType=VARCHAR},

        #{item.createTme,jdbcType=TIMESTAMP},

        #{item.openAccountId,jdbcType=BIGINT})

    </foreach>ON DUPLICATE KEY UPDATE tag=tag


查看完整回答
反对 回复 2019-04-25
?
慕沐林林

TA贡献2016条经验 获得超9个赞

ON DUPLICATE KEY UPDATE tag=tag
把这一句改为
ON DUPLICATE KEY UPDATE tag=#{item.tag}

查看完整回答
反对 回复 2019-04-25
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

BindingException,那么一定是Mybatis遍历你Collections的时候,有个对象取不到item属性,也许你放了一个null对象,请检查你的List<Object>


查看完整回答
反对 回复 2019-04-25
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

<insert id="batchInsert" parameterType="java.util.List">

    insert into

    personal_tag(type, tag, create_time, open_account_id)

    values

    <foreach collection="list" item="item" separator=",">

        (#{item.type,jdbcType=INTEGER},

        #{item.tag,jdbcType=VARCHAR},

        #{item.createTme,jdbcType=TIMESTAMP},

        #{item.openAccountId,jdbcType=BIGINT})

    </foreach>ON DUPLICATE KEY UPDATE tag=tag

</insert>


在insert标签加参数类型呢



修改下参数别名呢,还有接口的参数名,下面是我们之前的项目里的

void addRiskItemBatch(@Param("lstItem")List<FastRiskItemInfo> lstItem);


<!-- 批量添加条款 -->

<insert id="addRiskItemBatch" useGeneratedKeys="true" parameterType="java.util.List">  

    <selectKey resultType="long" keyProperty="id" order="AFTER">  

        SELECT  

        LAST_INSERT_ID()  

    </selectKey>

    insert into fast_risk_item_info (query_id, risk_item_id, 

      item_no, item_name, item_price, 

      status, create_time)

    values  

    <foreach collection="lstItem" item="item" index="index" separator="," >  

        (#{item.queryId,jdbcType=INTEGER}, #{item.riskItemId,jdbcType=INTEGER}, 

      #{item.itemNo,jdbcType=VARCHAR}, #{item.itemName,jdbcType=VARCHAR}, #                       {item.itemPrice,jdbcType=DECIMAL}, 

      #{item.status,jdbcType=INTEGER}, #{item.createTime,jdbcType=VARCHAR})

    </foreach>  

   </insert>


查看完整回答
反对 回复 2019-04-25
  • 5 回答
  • 0 关注
  • 2120 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号