开发者社区 问答 正文

mybatis批量插入数据问题?报错

 需要记录一个日志表,然后传了两个参数,date,list,主键id为自增长,然后keyProperty传id或者是item.id都提示报错。不知道这里要怎么传一个bean里面的字段进去,如果是插入1行数据直接使用id就可以了,批量插入的话这里要怎么传呢?谢谢!

<insert id="batchInsert"  useGeneratedKeys="true" keyProperty="item.id" keyColumn="id">
		insert into item_log_${date} (sid,player_id,item_id,change_num,count,reason,create_time) 
        values
		<foreach collection="list" item="item" index="index" separator=","> 
            (#{item.sid},#{item.playerId},#{item.itemId},#{item.change},#{item.count},#{item.reason},#{item.createTime})
        </foreach>
</insert>

 

展开
收起
爱吃鱼的程序员 2020-06-05 15:03:59 678 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>我自问自答吧,看了另外一个问题答案,发现keyProperty和keyColumn可以不要。</p>
                    
    
                        <p>keyProperty对应的是你在java中的id,看你的insert应该是sid。keyColumn是数据的id。</p> 
    

    类似下面这种写法

     <insert id="batchInsert">
            <selectKey keyProperty="deviceId" resultType="int" order="AFTER">
                select last_insert_id() as deviceId
            </selectKey>
            INSERT INTO gr_device
            (device_code, device_name, sim_expire, sim_number, company_id, company_name,device_type, deposit)
            VALUES
            <foreach collection="list" index="index" item="device" separator=",">
                (#{device.deviceCode}, #{deviceName}, #{deviceExpire}, #{device.simNumber},"1","高游",#{device.deviceType},#{device.deposit})
            </foreach>
        </insert>

     

                            不是你想的这样,我是不在sql里加主键,主键是自增长的id,java属性里也是id。你这样的也可以,先查询出来一个deviceId做为主键值,再插入。但是我不想执行两条语句,因为id对我的程序没太大意义。谢谢
    
    2020-06-05 15:04:11 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等