开发者社区> 问答> 正文

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 669 0
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
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第6讲】:Spring Boot 2.0实战MyBatis与优化(Java面试题) 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载